我正在使用SFML,并且正在使用Code::Block和mingw32构建一个应用程序。我已经在我的项目中添加了SFML库(sfml-whatever.a),它运行得很好。
但是iIrc,静态库被“编译”成了可执行文件。如果是这样的话,为什么我必须将所有的SFML DLL放在可执行文件的旁边,才能让它在Code::块之外的任何地方运行?如果我以某种方式“动态链接”代码::块中的动态链接库到我的项目中(我不知道如何做到这一点),我是否仍然必须将我的可执行文件与所有.a文件一起发布,才能正常运行?
提前感谢,我对库不是很熟悉,无论是静态的还是动态的。如果有什么不同的话,那就是我正在Ubuntu l
在此之后,我尝试编译stdlib.so以将其他代码与其链接。不幸的是,stdlib.so本身是一个动态链接的二进制:
# ldd /usr/local/go/pkg/linux_amd64_dynlink/libstd.so
ldd: warning: you do not have execution permission for `/usr/local/go/pkg
/linux_amd64_dynlink/libstd.so'
linux-vdso.so.1 (0x00007ffd611d7000)
libpthread.so.0 => /lib64/lib
我不太明白如何编译使用另一个库的库。据我所知,这4起案件:
1)编译使用静态库( B )的静态库( A ):编译将有效,但针对库A的链接将无法工作,因为静态库只是包含A编译产生的.o文件的存档,而不是B。在创建静态库时,编译阶段搜索函数定义并在标头中找到它们是真的吗?在链接阶段,编译器在库B中搜索函数实现,如果它找到函数实现,编译是成功的,但是它实际上并没有将函数实现放在静态库A中。这就是为什么当链接到A时,它不能工作。
2)编译使用动态库的静态库:我认为创建A和使用A都是可行的,但为什么会这样呢?编译器实际上在dll/so中放了什么?
3)编译使用静态库的动态库:这是否可行?
4)编译一个使