Linux和Windows链接器之间的区别

时间:2011-04-20 09:01:14

标签: windows linux gcc linker shared-libraries

在各种操作系统上链接有什么区别?

例如,以下代码在Windows上生成链接器错误(使用Vs2010和gcc编译),但在Linux上成功编译(Ubuntu,gcc):

extern int foo

int main() {
    foo=1;
}

Gcc命令:

gcc -shared filename.cpp

1 个答案:

答案 0 :(得分:1)

如果您尝试将其编译为Windows共享库,则需要类似(来自维基百科的代码!): -

#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导出函数名称才能被其他程序使用。