Linux共享库c ++

时间:2009-06-08 10:28:53

标签: c++ linux eclipse shared-libraries

我有一个明智的共享图书馆。我如何在我的程序中使用它?我是否需要包含该库的标题?

我在Linux下使用Eclipce。我使用-L和-l设置了库的路径。但是我的功能在程序中不可见。

你能解释一下共享图书馆是如何运作的吗?

问候。

编辑:

我收到以下错误:

int main() {
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg";
    CEDD_Descriptor::CEDD ced; // undefined reference to `CEDD_Descriptor::CEDD::CEDD[in-charge]()'
    ced.execute(path);
}

部首:

class CEDD
    {
        public:
            CEDD(double Th0, double Th1, double Th2, double Th3,bool CompactDescriptor);
            CEDD();
            ~CEDD(void);

            double T0;
            double T1;
            double T2;
            double T3;
            bool Compact;

            double* execute(char* path);

        private:
            int cedd_segnum;                //number of segments
            int* cedd_partitionSize;        //number of pixels in each segment
    };

2 个答案:

答案 0 :(得分:10)

您需要在应用程序中包含头文件并链接它。

了解如何在shared librariesLinux howto中使用库。

如果头文件与您的应用程序不在同一目录中(通常不是),那么您需要告诉编译器在哪里查找它,使用-I/path/to/include包含包含目录的路径包含头文件。

在链接步骤中,您需要指向库。一般用法是使用-L/path/to/lib是包含您的库的目录的路径,后跟-l<libname>,其中<libname>是没有lib的库的名称,例如如果您有libboost_serialization-d-1_34_1.so,则可以使用-lboost_serialization-d-1_34_1

示例:

g++ -I/sw/include -Wall -g -I/usr/local/include/boost-1_36/ -c main.cpp -o main.o
g++ -L/sw/lib -lboost_serialization-d-1_34_1 -o x main.o 

答案 1 :(得分:0)

您是否还修改了包含路径(-I选项)以便它知道在哪里查找库的标头?如果你还没有这样做,那么编译器会抱怨无法找到函数/类/结构/等。