Разница между Linux и Windows, компоновщик - PullRequest
3 голосов
/ 20 апреля 2011

В чем разница между ссылками в различных операционных системах?

Например, следующий код вызывает ошибку компоновщика в Windows (скомпилированную как с Vs2010, так и с gcc), но успешно компилируется в Linux (Ubuntu, gcc):

extern int foo

int main() {
    foo=1;
}

Команда Gcc:

gcc -shared filename.cpp

1 Ответ

1 голос
/ 20 апреля 2011

Если вы пытаетесь скомпилировать ее как общую библиотеку 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 (выполняется при первой загрузке модуля), а имена функций необходимо экспортировать с помощью gobledygook declspec, прежде чем они смогут использоваться другой программой.

...