Linux共享库c ++

我有一个共享库wise.so. 我如何在我的程序中使用它? 我是否需要包含该库的标题?

我在Linux下使用Eclipce。 我使用-L和-l设置了一个到库的path。 但是我的function在程序中是不可见的。

你能解释一下我的Shared Library是如何工作的吗?

问候。

编辑:

我得到以下错误:

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 }; 

您需要将头文件包含在您的应用程序中并与其链接。

看看如何在共享库和Linux 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 -ox main.o 

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