2014-10-02 3 views
1

Я пытаюсь создать общую библиотеку и попробовать ее загрузить.Общие библиотеки с G ++ в Linux

Я создал файл заголовок cqueue.h

  /* 
      * File: cqueue.h 
      * Author: 
      * 
      * Created on 2 October, 2014, 8:08 AM 
      */ 
      #include <iostream> 
      #include <cmath> 


      #ifndef CQUEUE_H 
      #define CQUEUE_H 

      class cqueue 
      { 
        private : 
          int *arr ,idx; 
          int ARR_LEN; 
        public : 
          int init(int len); 
          void insert (int item) ; 
          int mean() ; 
      } ; 



      #endif /* CQUEUE_H */ 

и исходный файл cqueue.cpp

#include <iostream> 
    #include <cmath> 
    #include "cqueue.h" 
    using namespace std; 



    int cqueue :: init(int maxsize){ 

     arr = new int [ maxsize ]; 
     for (int i = 0; i < ARR_LEN; i++) 
     { 
      arr[i]=0; 
     } 
     ARR_LEN=maxsize; 
     idx=0; 
     return 1; 
    } 
    void cqueue :: insert(int value) 
    { 
     arr[idx] = value; 
     if (idx == ARR_LEN - 1) 
     idx = 0; 
     else 
     idx++; 
    } 
    int cqueue :: mean() 
    { 
     int ret=0; 
     for (int i=0;i<ARR_LEN;i++) ret=ret+arr[i]; 
     return ret/ARR_LEN; 
    } 

я строй так с следующим кодом

g++ -fpic -g -c -Wall cqueue.cpp 
    g++ -shared -Wl-Wl,-soname,cqueue.so -o cqueue.so cqueue.o 

После этого Я написал пример кода для загрузки, который так

 #include <iostream> 
     #include <cmath> 
     #include "cqueue.h" 
     using namespace std; 



     int main(void) 
     { 

      cqueue test; 
      test.init(2000); 
      int a; 
      for (int i = 0; i < 100000; i++) 
      { 
      test.insert(i); 
      a=test.mean(); 

      } 

      cout<<a<<endl; 

      return 0; 
     } 

Когда я попытался собрать его, я получаю следующее сообщение об ошибке

g++ -Wall -I . -L . sotest.cpp -o test -lcqueue 

    /usr/bin/ld: cannot find -lcqueue 
    collect2: ld returned 1 exit status 

Все коды находятся в одной и той же папке. Что здесь может быть не так? Я попытался экспортировать LD_LIBRARY_PATH =/home/current/folder, но не повезло.

Любая помощь будет оценена по достоинству.

+0

Я не думаю, что нет пространства между '-L' и' '.' так -L.' вместо' -L .'. (то же самое с '-I'). – Galik

ответ

4

переименовать cqueue.so в libcqueue.so.

-l предполагает имя библиотеки начать с lib

+0

opps .. Как я могу это пропустить. Благодарю. –

Смежные вопросы