首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何链接到共享库?

如何链接到共享库?
EN

Stack Overflow用户
提问于 2014-09-25 13:57:00
回答 1查看 1.6K关注 0票数 1

我从源代码中安装了一个新的库,并试图链接到它。链接器抱怨它找不到应该在库中的符号。

以下是我遇到的错误:

代码语言:javascript
复制
$ make all
gcc -std=c99 -g -Wall -O3 `pkg-config --cflags --libs libmodbus` -c client.c -o client.o
gcc -std=c99 -g -Wall -O3 `pkg-config --cflags --libs libmodbus` client.o -o client
client.o: In function `main':
/home/gauthier/code/modbus/client.c:29: undefined reference to `modbus_new_tcp'
/home/gauthier/code/modbus/client.c:30: undefined reference to `modbus_connect'
/home/gauthier/code/modbus/client.c:33: undefined reference to `modbus_read_registers'
/home/gauthier/code/modbus/client.c:35: undefined reference to `modbus_close'
/home/gauthier/code/modbus/client.c:36: undefined reference to `modbus_free'
collect2: error: ld returned 1 exit status
make: *** [client] Error 1

pkg-config说:

代码语言:javascript
复制
$ pkg-config --cflags --libs libmodbus
-I/usr/local/include/modbus  -L/usr/local/lib -lmodbus 

/usr/local/lib中的文件如下:

代码语言:javascript
复制
$ ls /usr/local/lib/ | grep mod
libmodbus.la
libmodbus.so
libmodbus.so.5
libmodbus.so.5.0.5

此外,so文件包含未定义的引用:

代码语言:javascript
复制
$ grep modbus_connect /usr/local/lib/*
Binary file /usr/local/lib/libmodbus.so matches
Binary file /usr/local/lib/libmodbus.so.5 matches
Binary file /usr/local/lib/libmodbus.so.5.0.5 matches

我尝试将/usr/local/lib添加到LD_LIBRARY_PATH中,而不是av。但我并不认为这会有所帮助,因为我的编译器命令中有-L

我还尝试手动编写-I-L-l (不使用pkg-config),这没有帮助。

如何使链接器理解对modbus_*函数的引用就在那里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-25 14:12:44

让我猜猜。

在命令中写入此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和对象文件。因此,‘foo.o -lz bar.o’在文件foo.o之后但在bar.o之前搜索库‘z’。如果bar.o引用‘z’中的函数,则这些函数可能不会加载

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

所以试着把pkg-config --cflags --libs libmodbus放在最后

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26040479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档