我在MSYS上工作,我有一个“工厂”系统,根据外部(指定)文件创建类的实例。该系统由libA提供。 使用这种机制,我的libB测试可执行文件“只需要”B的头文件和libA进行编译,尽管它实际上需要库libB才能运行! 知道了,我确实要求编译器(通过CMake)使用标志-Wl链接库libB, - 不需要:
g++.exe -std=gnu++11 -O3 -Wl,--whole-archive CMakeFiles/test.dir/objects.a -Wl,--no-whole-archive -o test.exe -Wl,--no-as-needed libB.dll.a libA.dll.a [other dependencies]
可执行文件已编译,但无法正常运行(工厂无法构建libB提供的对象实例)。 但是,在test.cpp(没有工厂机制的构建)中添加这样的对象的虚拟(实际)实例就足以确保libB确实链接,然后一切都很好。但这很脏,这是一个“每个案例”的解决方案。
所以,除了这个肮脏的修复,我的第一个提示是“--as-needed”/“ - no-as-needed”指令,但它不能解决我的问题。我现在对任何建议持开放态度。有什么帮助吗?