Linux 共享库 c++
Posted
技术标签:
【中文标题】Linux 共享库 c++【英文标题】:Linux Shared Libraries c++ 【发布时间】:2009-06-08 10:28:52 【问题描述】:我有一个共享库 wise.so。我如何在我的程序中使用它?我需要包含该库的标题吗?
我在 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
;
【问题讨论】:
【参考方案1】:您需要在应用程序中包含头文件并链接它。
看看如何使用shared libraries 和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 -o x main.o
【讨论】:
"undefined reference to `CEDD_Descriptor::CEDD::CEDD[in-charge]()" 听起来链接器在库中找不到符号,你使用 -L/library/path/to /lib -llibname 要链接吗?【参考方案2】:您是否还修改了包含路径(-I 选项),以便它知道在哪里查找库的标头?如果你还没有这样做,那么编译器会抱怨找不到函数/类/结构/等。
【讨论】:
以上是关于Linux 共享库 c++的主要内容,如果未能解决你的问题,请参考以下文章
与linux和windows c++兼容的共享内存库[关闭]
Windows 和 Linux 上动态库的 C++ 标准 [关闭]