Linux和Windows链接器的区别



在不同的操作系统上链接有什么不同?

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

extern int foo
int main() {
    foo=1;
}

Gcc命令:

gcc -shared filename.cpp

如果你想把它编译成一个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导出,然后才能被另一个程序使用。

最新更新