在不同的操作系统上链接有什么不同?
例如,下面的代码在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导出,然后才能被另一个程序使用。