gpt4 book ai didi

c++ - 静态库中 undefined symbol ,但在同一个 VS 解决方案中存在

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:23 32 4
gpt4 key购买 nike

我有一个奇怪的链接器错误,我似乎无法解决。这个项目实际上是我们系统在 Linux 上的 Windows 移植,所以我们知道在移植到 Windows 之前一切正常。

我正在使用 VS2013(编译正常)将 FTGL(OpenGL 字体库)编译为静态库,并且在 DLL 中使用该静态库。但是,我收到链接器错误,说它找不到符号,据我所知,那里有:

Error   1   error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall FTPoint::FTPoint(void)" (__imp_??0FTPoint@@QAE@XZ) referenced in function "public: virtual void __thiscall FPSCounter::draw(class Projector const *)" (?draw@FPSCounter@@UAEXPBVProjector@@@Z)  E:\Desktop\libWCLVS\fpsCounter\fpsCounter.obj   fpsCounter

Error 2 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall FTPoint::FTPoint(double,double,double)" (__imp_??0FTPoint@@QAE@NNN@Z) referenced in function "public: virtual void __thiscall FPSCounter::draw(class Projector const *)" (?draw@FPSCounter@@UAEXPBVProjector@@@Z) E:\Desktop\libWCLVS\fpsCounter\fpsCounter.obj fpsCounter

"dumpbin.exe /symbols" on the FTGL static lib shows the following (amongst the rest):

1E5 00000000 SECT10 notype () External | ??0FTPoint@@QAE@XZ (public: __thiscall FTPoint::FTPoint(void))

1E6 00000000 SECTE notype () External | ??0FTPoint@@QAE@NNN@Z (public: __thiscall FTPoint::FTPoint(double,double,double))

到目前为止,这一直是在单独的 VS 解决方案(均为调试版本)中编译静态库和我的 DLL。如果我将现有的静态 lib VS 项目导入我的 DLL 解决方案并通过项目的 Common Properties -> References 创建对它的引用,DLL 编译、链接和执行正常(也作为调试版本)。这对我来说似乎很奇怪,因为我在不同的解决方案中使用同一个项目,它将编译相同的项目,因此我应该有相同的 undefined symbol 。

很明显,VS 在同一解决方案中链接它们与导出库然后链接到它时有所不同。有谁知道为什么我会遇到这种行为以及我可以做些什么来尝试解决它?

最佳答案

啊!感谢 rpress,我查看了 FTGL_LIBRARY_STATIC 并检查它是否在 FTGL 项目中定义,但它没有在我的包含 FTGL header 的应用程序中定义,因此我的程序将执行 dllimport。刚刚将 FTGL_LIBRARY_STATIC 添加到我的应用程序项目中,一切正常。谢谢!

关于c++ - 静态库中 undefined symbol ,但在同一个 VS 解决方案中存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313786/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com