回答
我还可以针对这个库编译一些代码吗?
编译:是的。链接:也许。
您可以创建一个虚拟库来链接。例如。如果头中包含:
int library_func(void*);
则:
// dummy_lib.c
int library_func(void *p) { return 0; }
gcc -fPIC -shared -o libfoo.so dummy_lib.c
# Now you can use libfoo.so to link your program.
有一些疑难杂症的:
- 真正的图书馆可能有比
libfoo.so
(例如libfoo.so.2
)以外的东西SONAME
。如果没有访问真实的libfoo
,你无法知道。 - 真正的库可以使用版本化的符号。如果您将程序与虚拟库链接,它将使用所有引用符号的默认版本,这些符号现在可能是正确的,但可能在将来中断(如果/当真实库更新为新的并且不兼容执行您调用的任何符号)。
我发现了一个更简单但不太稳健的解决方案:使用clang创建一个空库:'echo“”| clang ++ -shared -fPIC -x C++ - -o libfoo.so'并告诉'clang/ld'在链接时忽略未解析的符号:-Wl, - unresolved-symbols = ignore-in-object-files'。 –
是的。你可以为它们声明指向函数的指针,然后调用dlopen
和dlsym
,然后离开。但是,试图以某种方式调制一个可执行文件或共享库,就好像你已经链接到该库一样是有风险的;详情请参阅俄罗斯雇主的答案。
你将需要这个库自己去运行的代码,当然。
但是,请注意,并非所有'共享库'只是共享库。在某些情况下,有一个.a
文件在链接时用于在运行时提供一些静态链接代码以及.so
。这并不常见。
“链接器不会根据库的内容改变任何内容。” - 当考虑版本符号时,这是非常错误的。 –
当您要使用dlopen和dlsym时,我不认为版本化符号会对此表单产生好奇效果。我会澄清。 – bmargulies
'dlsym'和版本化的符号以更混乱(可以说是破碎的)方式相互作用。 https://sourceware.org/bugzilla/show_bug.cgi?id=14932 –
- 1. 不能boost库链接到共享库
- 2. 将共享库链接到共享库
- 3. 将共享库与其他共享库链接是否好?
- 4. 是否有可能通过数据库链接访问数据库链接
- 5. 链接到linux共享库
- 6. 链接到共享库Linux
- 7. 链接共享库
- 8. 链接不同版本的共享库
- 9. 将静态库链接到共享库?
- 10. cygwin:链接器找不到共享库
- 11. 链接共享库可执行与另一个共享库
- 12. 共享库文本段不可共享
- 13. Facebook是否允许共享文本(而不是链接)?
- 14. 如何将共享库与其他共享库链接到Linux?
- 15. 链接一个共享库静态到我的共享库
- 16. 建立共享库链接到其他不标准共享libarary
- 17. 链接共享库时的问题
- 18. 与共享库链接
- 19. Android.mk:共享库未链接
- 20. gcc的链接共享库
- 21. 共享数据库链接
- 22. C++静态库可以链接到共享库吗?
- 23. 如何从共享库链接到具有相对路径的共享库
- 24. 从JavaScript访问本地共享库
- 25. 这个链接到共享库有什么问题?
- 26. 链接防静电共享库是不可移植的
- 27. Eclipse CDT链接到共享库
- 28. 无法链接到共享库
- 29. 链接到Qt中的共享库
- 30. 如何链接到共享库?
它可能在AIX中:链接时,可以使用_export-file_而不是实际的库。我不知道在GNU/Linux中是否有这样的可能性 –