【发布时间】:2011-09-04 06:51:51
【问题描述】:
我目前正在编写一个可以在 Windows 和 Linux 上运行的程序。该程序使用动态模块(LoadLibrary/dlopen)来简化不同功能的部署。
Linux 部分工作得很好:主程序使用 -Wl,--export-dynamic 导出函数和变量,以便模块可以访问它们,并且可以使用 gcc 的 -shared 选项编译模块,而无需解析所有链接时的符号依赖关系。
对于 Windows(使用 MSVC 2010),这似乎不起作用。我正在使用 __declspec(dllimport) 从主程序中导出函数和变量,但我无法从主程序中访问函数和变量,因为链接失败(未解析的外部,LNK1120)。
如何处理?谢谢。
编辑(代码示例):
核心文件.cpp
#include "core-file.hpp"
Cls_A cls_instance;
void Cls_A::do_something() {
while(0);
}
核心文件.hpp
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif
class TEST_API Cls_A {
public:
void do_something();
};
extern Cls_A cls_instance;
module.cpp
#include "core-file.hpp"
TEST_API int my_init_function() {
cls_instance.do_something();
return 0;
}
【问题讨论】:
-
请发布出现问题的代码。您的某些陈述没有多大意义(例如“我正在导出函数...使用
__declspec(dllimport);”您的意思是dllexport吗?您的意思是您正在导入函数吗?)。 -
一个 DLL 有一个 LibMain。您是否在 VS 2010 项目的配置属性中设置了正确的配置类型?
-
当您已经在 Linux 上使用 GCC 时,为什么还要在 Windows 上使用 MSVC?在所有平台上都使用 GCC,这将使您的工作更轻松,问题更少。
标签: c++ visual-studio module