Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

llcppsymg:linux #91

Open
1 task
luoliwoshang opened this issue Oct 12, 2024 · 3 comments
Open
1 task

llcppsymg:linux #91

luoliwoshang opened this issue Oct 12, 2024 · 3 comments

Comments

@luoliwoshang
Copy link
Owner

luoliwoshang commented Oct 12, 2024

  1. 在Linux出现了 --libs expanded后不带上动态链接库路径的问题
  • 对于不存在动态链接库路径的package,均从标准库的搜索路径中再去查找一遍
root@be00d9b1c2c9:/usr/lib/aarch64-linux-gnu# pkg-config --libs lua5.4
-llua5.4 
  1. Linux上动态链接库名称为 .so 结尾,并且nm工具对于linux上apt-get 获得的动态链接库获取不了其符号信息
root@be00d9b1c2c9:/lib/aarch64-linux-gnu# ldconfig -p | grep lua5.4   
        liblua5.4.so.0 (libc6,AArch64) => /lib/aarch64-linux-gnu/liblua5.4.so.0
        liblua5.4.so (libc6,AArch64) => /lib/aarch64-linux-gnu/liblua5.4.so
        liblua5.4-c++.so.0 (libc6,AArch64) => /lib/aarch64-linux-gnu/liblua5.4-c++.so.0
        liblua5.4-c++.so (libc6,AArch64) => /lib/aarch64-linux-gnu/liblua5.4-c++.so
root@be00d9b1c2c9:/lib/aarch64-linux-gnu# ls | grep "lua"
liblua5.4-c++.a
liblua5.4-c++.so
liblua5.4-c++.so.0
liblua5.4-c++.so.0.0.0
liblua5.4.a
liblua5.4.so
liblua5.4.so.0
liblua5.4.so.0.0.0
root@be00d9b1c2c9:/lib/aarch64-linux-gnu# nm liblua5.4.so
nm: liblua5.4.so: no symbols
root@be00d9b1c2c9:/lib/aarch64-linux-gnu# nm liblua5.4.so.0
nm: liblua5.4.so.0: no symbols
root@be00d9b1c2c9:/lib/aarch64-linux-gnu# nm liblua5.4.so.0.0.0
nm: liblua5.4.so.0.0.0: no symbols
@luoliwoshang
Copy link
Owner Author

@luoliwoshang
Copy link
Owner Author

https://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

Linux 上Symbol会出现用@@声明版本,分割的符号

root@be00d9b1c2c9:/lib/aarch64-linux-gnu# nm -gDU liblua5.4.so
0000000000000000 A LUA_5.4
0000000000026a40 T luaL_addgsub@@LUA_5.4
00000000000269a0 T luaL_addlstring@@LUA_5.4
0000000000026a04 T luaL_addstring@@LUA_5.4
0000000000026b80 T luaL_addvalue@@LUA_5.4
0000000000023624 T luaL_argerror@@LUA_5.4
0000000000024100 T luaL_buffinit@@LUA_5.4

@luoliwoshang
Copy link
Owner Author

luoliwoshang commented Oct 14, 2024

对于nm工具来说,发现在macos上必须不指定-D 输出,在linux上必须指定-D才能获得对应的符号

linux

root@be00d9b1c2c9:/lib/aarch64-linux-gnu# nm -gU liblua5.4.so
nm: liblua5.4.so: no symbols
root@be00d9b1c2c9:/lib/aarch64-linux-gnu# nm -gDU liblua5.4.so
0000000000000000 A LUA_5.4
0000000000026a40 T luaL_addgsub@@LUA_5.4
00000000000269a0 T luaL_addlstring@@LUA_5.4
0000000000026a04 T luaL_addstring@@LUA_5.4

macos

homebrew/lib on  stable via  v21.7.2 
❯ nm -gU libcjson.dylib
0000000000002ab8 T _cJSON_AddArrayToObject
0000000000002720 T _cJSON_AddBoolToObject
0000000000002690 T _cJSON_AddFalseToObject
0000000000002440 T _cJSON_AddItemReferenceToArray
0000000000002520 T _cJSON_AddItemReferenceToObject
homebrew/lib on  stable via  v21.7.2 
❯ nm -gDU libcjson.dylib
/Library/Developer/CommandLineTools/usr/bin/nm: error: libcjson.dylib: File format has no dynamic symbol table

原因是macOS 和 Linux 在动态库的结构和符号表管理存在不同,Linux 采用 ELF 格式,而macOS 采用Mach-O 格式

通过 Macos的报错可以看到,这个文件格式不存在动态符号表,并且通过 man nm来查看也不存在-D 选项

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant