使用共享库时未定义的引用

时间:2012-06-12 15:26:18

标签: shared-libraries undefined-reference

我想将一个程序用作其他程序的共享库。

我开始如下: 我有一个我用以下编译的应用程序:

/usr/bin/g++ -I/usr/include/libxml2  -Xlinker -zmuldefs -fPIC -c a.cpp
/usr/bin/g++ -I/usr/include/libxml2  -Xlinker -zmuldefs -fPIC -c b.cpp
/usr/bin/g++ -I/usr/include/libxml2  -Xlinker -zmuldefs -fPIC -c c.cpp

然后我使用以下命令从我从这个文件中获取的对象创建了一个共享对象库:

g++ -fPIC -Xlinker -zmuldefs -shared -o libabc.so a.o b.o c.o

在此之后,我得到了我复制到

的libabc.so文件
sudo cp libabc.so /usr/local/lib/libabc.so

现在,当我编译我的orignal应用程序时,将使用此命令使用这个新创建的库 libabc.so

/usr/local/lib/libabd.so: undefined reference to `xmlXPathNewContext'

我从第一个应用程序中包含的库libxml2中使用的所有函数出错,而且具有此未定义引用的函数实际上是我在第一个程序中包含的库,我的意思是我已经测试过它。 所以,任何人都可以指导我需要更正的地方。

2 个答案:

答案 0 :(得分:0)

我没有看到您用于将应用程序与库链接的命令行,但我认为将-lxml2添加到传递给链接器的标志应该可以解决问题。

答案 1 :(得分:0)

您可能还必须使用-I/path/to/library传递路径,或者将其导出到LD_LIBRARY_PATH