我有共享库的头文件,但没有共享库,也没有源代码。
我还可以针对这个库编译一些代码吗?
如果没有,共享库包含哪些信息不在标题中?
答案 0 :(得分:3)
我还可以针对这个库编译一些代码吗?
编译:是的。链接:也许。
您可以创建要链接的虚拟库。例如。如果标题包含:
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.
有一些问题:
SONAME
以外的其他内容libfoo.so
(例如libfoo.so.2
)。如果没有真正的libfoo
。答案 1 :(得分:2)
是。您可以为它们声明指向函数的指针,然后调用dlopen
和dlsym
,然后离开。但是,尝试以某种方式编写一个可执行文件或共享库,就好像你已经链接到库一样有风险;有关详细信息,请参阅俄罗斯公司的答案。
当然,您将需要这些库来运行代码。
但是,请注意并非所有共享的库和#39;只是共享库。在某些情况下,有一个.a
文件在链接时用于在运行时提供除.so
之外的一些静态链接代码。这并不常见。