开发者社区> 问答> 正文

有没有办法在Linux上使用GCC / Clang强制乘法定义的符号?

我正在一个项目上使用两个单独的库(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上编译并运行。

展开
收起
祖安文状元 2020-01-08 15:19:33 606 0
1 条回答
写回答
取消 提交回答
  • 我决定继续运行带有进程间通信的两个独立进程来解决此问题。

    尽管可能已经可以使用诸如之类的其他解决方案objcopy,因为我不知道这些库中到底发生了什么,也没有时间让自己熟悉所有Microsoft的源代码,所以看来阻力最小的途径是使用两个过程。非常感谢您为此提供的帮助,并希望此线程可以在将来对某人有所帮助。

    2020-01-08 15:19:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载