各种操作系统之间的链接有什么区别?
例如,以下代码在Windows上(使用Vs2010和gcc编译)会产生链接器错误,但在Linux上(Ubuntu,gcc)可以成功编译:
extern int foo
int main() {
foo=1;
}
Gcc命令:
gcc -shared filename.cpp
各种操作系统之间的链接有什么区别?
例如,以下代码在Windows上(使用Vs2010和gcc编译)会产生链接器错误,但在Linux上(Ubuntu,gcc)可以成功编译:
extern int foo
int main() {
foo=1;
}
Gcc命令:
gcc -shared filename.cpp
#include <windows.h>
// DLL entry function (called on load, unload, ...)
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
return TRUE;
}
// Exported function - adds two numbers
extern "C" __declspec(dllexport) double AddNumbers(double a, double b)
{
return a + b;
}
Windows共享模块(DLL)需要一个DllMain入口点(在加载模块时首次执行),并且函数名称需要通过declspec gobledygook导出,然后才能被另一个程序使用。
DllMain
函数。要使用 dll,我必须有 extern "C" __declspec(dllexport)
,但那是在链接之后的事情 :-) - krisyextern "C"
。在 DLL 中,C++ 签名也可以正常工作。 - Dennis Hostetler
;
。 - greatwolf