在Linux上使用G ++共享库

时间:2014-10-02 03:36:30

标签: c++ unix shared-libraries

我正在尝试创建一个共享库并尝试加载它。

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

cqueue.so重命名为libcqueue.so

-l假设图书馆名称以lib

开头