Ошибка командной строки при связывании DLL

Я использую набор инструментов Visual Studio 2010 для создания DLL. В частности, я хочу модуль Matlab. Я думаю, что я довольно близко, но я сталкиваюсь со следующей ошибкой:

LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
.libs/AverageFilter.mexw32 : fatal error LNK1120: 1 unresolved externals

В моей DLL нет такого символа, потому что в общей библиотеке его нет смысла. Однако, libcmt.lib включает в себя как символы для исполняемых файлов, так и DLL. Таким образом, я понимаю ошибку, но поскольку я явно создаю DLL, я ожидал, что компоновщик Microsoft проигнорирует этот конкретный неразрешенный символ.

Насколько я понимаю, при создании библиотек DLL ожидалось, что не будет неопределенных символов, но поскольку единственный такой символ не имеет значения, я решил использовать опцию «/ FORCE». Мне действительно не нравится это решение, но сначала я хотел бы иметь работающий модуль Matlab, а затем усовершенствовать свое решение.

К сожалению, использование параметра «/ FORCE» приводит к следующей ошибке:

cl : Command line error D8021 : invalid numeric argument '/FORCE'

Как я могу устранить эти ошибки? Есть ли способ заставить компоновщик Microsoft игнорировать определенный неразрешенный символ?

1

Решение

Exe и Dll в окнах требуют точки входа, если они содержат исполняемый код, см. Эту страницу MSDN для DllMain:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx

Для exe это, как правило, main () для консольного приложения или WinMain для чистого win32 API-приложения.

Поскольку вашей DLL нужна функция main (), я предполагаю, что вы, вероятно, создали консольный проект EXE, а затем изменили его на DLL.

Чтобы решить вашу проблему, вам нужно создать функцию точки входа, которая обычно является DllMain, но в вашем случае на самом деле является главной. Точка входа вашей DLL ничего не может сделать (то есть функция empty / stub), что позволит ей связываться и загружаться / выгружаться операционной системой, которая затем позволяет вашим клиентам вызывать ваш код :).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]