我正在一个项目上使用两个单独的库(PLCIO和azure-iot-sdk-c)。该项目主要是使用Visual Studio在Windows上开发的,但需要在生产环境中的Linux上运行。我目前正在使用Ubuntu盒子模拟生产。在Windows的Visual Studio中编译程序时,出现链接器错误LNK2005和LNK1169。我通过使用Visual Studio中的/ FORCE:MULTIPLE链接器选项解决了此问题。我们的应用程序可以按预当我将代码和库移植到Linux测试箱时,我正在使用cmake来构建和链接所有内容。该项目可以正确构建和链接,但是在运行时会遇到意外的分段错误。通过一次使用一个库创建存根程序并确认它们按预期运行,我将其范围缩小到两个库之间的交互。仅当我将两个库放在一起时,我才遇到问题。我认为这是一个合理的假设,即相同的乘法定义符号错误正在Linux上导致此seg错误,只是出于某种原因在编译期间未捕获到该错误。
我已经尝试了很多编译器和链接器标志(同时使用GCC和Clang)来构建此项目,以尝试解决此问题。我试过了-fvisibility=hidden -shared -nostdlib。我-symbolic在GCC文档中找到了,但是在尝试使用它时出现“无法识别的选项”错误。我最初是静态链接到预构建的库,但也尝试过动态链接并使用其余代码自己构建azure-iot-sdk。我每次都得到相同的结果。
本质上,我的问题归结为,是否有/ FORCE:MULTIPLE可以解决此问题,对于Linux工具链(GCC,Clang,我不在乎)是否存在任何等效项。或者,在谷歌搜索和故障排除过程中,是否有某些其他解决方案会以某种方式错过?期在Windows上编译并运行。
我决定继续运行带有进程间通信的两个独立进程来解决此问题。
尽管可能已经可以使用诸如之类的其他解决方案objcopy,因为我不知道这些库中到底发生了什么,也没有时间让自己熟悉所有Microsoft的源代码,所以看来阻力最小的途径是使用两个过程。非常感谢您为此提供的帮助,并希望此线程可以在将来对某人有所帮助。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。