Как связать MinGw-скомпилированную библиотеку с проектом MSV C в VisualStudio? - PullRequest
0 голосов
/ 15 апреля 2020

Я пишу проект в VS 2017, который использует Windows 32-битную версию SWI Prolog. Я использую интерфейс SWI Prolog C ++ в другом проекте, который компилируется с MSV C, используя заголовок C ++ и библиотеку .a stati c для go с ним.

Я прекрасно все связал, чтобы проекты нормально работали в режиме локального отладчика для VS. Однако, когда я пытаюсь использовать скомпилированный .exe, я получаю ошибку компоновщика:

Точка входа в процедуру __divmoddi4 не может быть расположена в динамической c библиотеке ссылок C: \ ProgrammingLanguages \ swipl-32 \ bin \ libswipl.dll

После некоторого поиска в Google я увидел, что эта функция уникальна для более новых версий G CC, и имеет смысл использовать ее в библиотеке Prolog SWI, учитывая он был скомпилирован с использованием MinGW.

Проблема в том, что мне нужно, чтобы этот исполняемый файл работал сам по себе, но я понятия не имею, как заставить проект устранить эту ошибку компоновщика без прямого переключения на G CC , Есть ли способ, как я могу решить эту ошибку компоновки, все еще используя MSV C?

Я читал некоторые другие темы об использовании extern "C" для решения проблемы, но я получаю ошибки компилятора, так как в заголовке есть перегруженные функции Я использую. Если мне не нужно использовать заголовок C для пролога SWI?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Никогда не находил истинного решения для этого, но просто старый путь вокруг. Я откатил SWI Prolog и взял более старую версию, в которой на самом деле были собраны библиотеки stati c и доступные для Windows.

0 голосов
/ 16 апреля 2020

Кажется, что он пытается использовать разные версии DLL в отладчике и в качестве отдельного EXE. Запустите проект в отладчике и проверьте, какие DLL он загружает (где-то в VS есть специальная панель). Затем убедитесь, что он может найти те же библиотеки DLL, когда вы запускаете его как отдельный исполняемый файл (например, поместите их в ту же папку, что и EXE).

...