2014-10-02 104 views
1

我正在尝试创建共享库并尝试加载它。在Linux上使用G ++共享库

我已经创建了一个头文件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 /文件夹,但没有运气。

任何帮助,将不胜感激。

+0

我觉得-L'和'.'所以'-L.'而不是'-L .'之间'没有空间。 (与'-I'相同)。 – Galik 2014-10-02 03:45:26

回答

4

重命名cqueue.solibcqueue.so

-l假定库名开始lib

+0

opps ..我怎么能错过。谢谢。 – 2014-10-02 03:42:08