Linux共享库C++

5

我有一个共享库wise.so,我该如何在我的程序中使用它?我需要包含这个库的头文件吗?

我在Linux下使用Eclipse工作。我已经使用-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个回答

10

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

可以参考如何使用共享库和Linux教程中的共享库Linux howto,了解如何使用库。

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

在链接步骤中,您需要指向库。一般的用法是使用-L/path/to/lib指向包含库的目录,然后跟上库名没有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 

“undefined reference to `CEDD_Descriptor::CEDD::CEDDin-charge”听起来像是链接器找不到库中的符号,您是否使用了“-L/library/path/to/lib -llibname”进行链接? - stefanB

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接