2015-10-21 3 views
0

Я настраивал свое приложение для компиляции на окнах 8, используя mingw32 (i686-w64-mingw32, если быть точным). Насколько я могу сказать, я правильно установил toolchain и ссылки и т. Д., И приложение компилируется и запускается внутри кодовых блоков. Когда я пытаюсь запустить версию релиза вне кодовых блоков. Мое приложение зависит от libsndfile-1, csound и нескольких библиотек SDL2. Libsndfile и csound статически связаны, SDL2 динамически связан. В моей папке проекта мои DLL-файлы SDL2 расположены в \ GUI \ bin.«Не удалось найти точку входа в процедуру ....»

При попытке запустить .exe за пределами кодовых блоков ... Если я вставляю DLL в папку с тем же относительным файловым пути к .exe, что и в папке проекта (например, \ GUI \ bin), я получаю сообщения об ошибках говорит мне, что не может найти SDL2 DLL в

Если я Наклейте DLL файлы в той же папке, как EXE-файл, я получаю следующее сообщение:

процедура точки входа _ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj мог не располагаться в динамической библиотеке ссылок C: \ Users \ Питер \ Documents \ SDLGUIApp \ Bin \ Release \ SDL GUI.exe

Я сделал некоторые исследования, и я изо всех сил, чтобы найти информацию, которая имеет отношение к моей ситуации. Увидев, что он удаляет сообщения об ошибках «не удается найти DLL», когда я перемещаю их в ту же папку, что и .exe, тогда я предполагаю, что он находит их в одной папке, и эта ошибка вызвана чем-то другим, или он еще менее счастлив, когда их перемещают в одну папку, чем с ними в «правильном» месте. В любом случае, я в тупике!

Любая помощь будет очень признательна!

Пит

EDIT:

Некоторые источники, которые я нашел показывают, что порядок, в котором я связываю с библиотеками может привести к аналогичной (хотя и не идентичны) ошибок. Я попытался перетасовать их, но ничто из того, что я пробовал, не улучшило его. Вот как я Сшивание

В других вариантах линкера:

-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf

В библиотек:

C: \ Program Files \ Libraries \ Csound6 \ bin \ csound64.lib C: \ Program Файлы \ Библиотеки \ libsndfile32 \ lib \ libsndfile-1.lib

Посмотрите на журнал сборки кода, чтобы он сначала связывал «другие параметры компоновщика». Я предполагаю, что это, потому что один из последних разделов из журнала сборки говорит, что это:

-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf -s -mwindows -lmingw32 «C: \ Program Files \ Библиотеки \ Csound6 \ bin \ csound64.lib "" C: \ Program Файлы \ Библиотеки \ libsndfile32 \ lib \ libsndfile-1.Lib»

Я не уверен, что -s означает, и почему он упоминает -lmingw32 дважды

EDIT:.

К сожалению, дальнейшее редактирование ... Я читал о том, как аналогичные ошибки возникают либо из-за отсутствия основной функции, либо из-за неправильного типа сборки, выбранного в параметрах сборки кодовых блоков (как правило, это разница между консольным или графическим интерфейсом, установленным под опцией типа). Я попытался изучить эти идеи, но я определенно имеют функцию «int main()», main.cpp включен как в сборку отладки, так и в выпуске, и у меня есть «консольное приложение», выбранное как тип сборки для отладки a й выпуск, насколько я могу судить, ошибка не из-за любого из них.

ответ

1
  1. Я не думаю, что проблема «dll not found». Скорее, я думаю, что это «имя функции не найдено».

  2. В частности, если вы использовали кодировку в «C», вы могли бы ссылаться на имена функций, такие как «myFunc()».

    Если вы кодирования в C++, вы бы вместо того, чтобы ожидать «mangled names», как «_ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj».

  3. Другими словами, я думаю, что вы случайно не скомпилировали некоторые функции C, как если бы они были C++, а компоновщик ищет «искаженное имя» вместо «фактического имени».

SUGGESTIONS:

а. Посмотрите, распознаете ли вы «_ZNSt7__cxx1112basic_stringlcst11char_traitslcSt11char_traitslcESalcEE10_M_replaceEjjPKcj» как функцию, которую вы могли бы написать. Если да, убедитесь, что у него есть расширение .cpp (C++); и убедитесь, что вы включили объектный файл (.o или .obj) в свою ссылку.

b. В противном случае убедитесь, что у вас #include <xyz> соответствующий файл заголовка (.h) для каждый внешний вызов, который вы делаете.

c. В противном случае напишите простую 5-строчную программу SDL2 «hello world», чтобы убедиться, что вы можете успешно компилировать, связывать и выполнять.

d. Если "привет мир" не удается, обновить свой пост с:

1. "hello world" source 
2. "hello world" compile/link command 
3. Exact error message 

Эти ссылки могут также помочь:

+0

Благодарим Вас за ответ, и жаль, что так долго реагировать. Я не могу найти какие-либо функции, названные так. Хотя то, что произошло со мной, это то, что в нем упоминается строка и символ. Mingw жаловался на некоторые преобразования из char * в строку или из строки в char *. Я не на машинке для окон, поэтому пока не могу проверить. Я бы подумал о точке b. будет влиять на мою программу, работающую как внутри, так и вне IDE, но я не уверен в этом, поэтому дайте мне знать, если я ошибаюсь. Я сделаю привет мир и отчитаюсь ... –

+0

Спасибо за ссылки тоже, пока я еще не нашел ответа на мою проблему, они помогли мне с некоторыми другими вещами, которые были бы явственно выпущены, как только я это решил: D Является ли это готовым решением для ответа если они вообще полезны? Или они должны быть правильным решением проблемы? –

Смежные вопросы