首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于未定义引用,无法在Windows下编译共享库

由于未定义引用,无法在Windows下编译共享库
EN

Stack Overflow用户
提问于 2020-02-20 17:10:06
回答 1查看 251关注 0票数 1

我正在使用相同的waf脚本,用于LinuxWindows,为程序编译shared-library (它能够在运行时加载共享库)。

为了创建这个库,我导入了主程序的一些头部,这样我就可以在库中调用主程序的函数,并且在运行时解析符号,这在Linux下是可行的。

在Windows下,我无法构建库,因为它为我在库中调用的主程序的每个函数都显示了undefined reference

在这种情况下,WindowsLinux有什么区别?为什么我必须在链接时间解析Windows下的符号?有没有国旗之类的东西来避免这种情况?

EN

回答 1

Stack Overflow用户

发布于 2021-12-27 15:39:21

Linux允许共享库中未解析的符号,但Windows不允许。我不太清楚这种差异的原因。例如,在https://lists.gnu.org/archive/html/libtool/2007-04/msg00070.html中,您可以看到一种观点,即在Linux上,它是“允许共享库中的循环引用”。

在Windows上,您可以获得与Linux上具有/FORCE:UNRESOLVED链接器参数的行为相同的行为(请参阅https://learn.microsoft.com/en-us/cpp/build/reference/force-force-file-output?view=msvc-170),但它有一个限制,即您的DLL必须有一个入口点。

在Linux上,您可以获得与使用-Wl,-no-undefined链接器参数的Windows上相同的行为。此外,还可以使用参数-Wl,--no-allow-shlib-undefined,仅在链接所针对的共享库中不允许未定义的符号(请参阅https://linux.die.net/man/1/ld)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60325256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档