GCC, связывающий библиотеки, не найден?
- ОС: Windows 7 Pro X64
- IDE: Eclipse IDE для разработчиков на C/C++
- Компилятор: MinGW (последний, 4.5.2)
Компиляция HelloWorld.c работает; но когда я пытаюсь добавить некоторые внешние библиотеки, он задыхается.
Я добавил файлы.a и.dll в мои "Библиотеки"; добавьте путь к PATH и пути к библиотеке. Я также положил включаемые файлы и настроил Включить. Говорят, что мои библиотеки совместимы с win / mingw. У них также есть другая загрузка для MSVC, которая действительно работает.
Разочарование. Ld.exe дает полный путь и, очевидно, у меня есть права на чтение / запись. Я также включил их без пути (они находятся в пути библиотеки и пути).
Я не понимаю, почему это не работает.
c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe: не удается найти -lC:\rhino\data\lib\glfw.dll c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: не удается найти -lC:\rhino\data\lib\libglfwdll.a c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: невозможно find -lC:\rhino\data\lib\libglfw.a
C:\Users\rhino>dir C:\rhino\data\lib\libglfw.a
04/15/2011 05:24 PM 70,384 libglfw.a
Обновлено:
Я даже добавил их в мой путь C:\MinGW\lib, но он все еще не может их найти.
4 ответа
Майкл Барр указал правильный способ ссылки на библиотеки в командной строке. Путь к библиотеке указывается с -L
и имя библиотеки с -l
переключатель (имя библиотеки, являющейся именем файла, без lib
часть в начале, а .a
суффикс в конце).
Еще одна вещь, на которую следует обратить внимание, это то, что вы пытаетесь связать как статическую (libglfw.a), так и динамическую (glfw.dll) версию библиотеки, которые оба включены в загрузку, одновременно. Вместо этого вы должны выбрать один, основываясь на ваших потребностях / желаниях, и только ссылку на него.
Связать со статической версией просто. Просто добавь -lglfw
в командной строке.
Чтобы использовать динамическую библиотеку, вы должны сделать ссылку на библиотеку импорта для библиотеки DLL (libglfwdll.a
), используя -lglfwdll
и пропустите саму dll из команды link. По сути, библиотека импорта не содержит никакого объектного кода, а содержит только определения; Фактический код находится в DLL. DLL будет динамически связан во время выполнения. (Чтобы это работало, система должна быть в состоянии найти dll; то есть она должна находиться в текущем рабочем каталоге, в каталоге, который находится в пути, или ее каталог должен быть добавлен в специальную переменную среды, используемую для этого, но для того, чтобы это стало важным, сначала вы должны преуспеть в создании исполняемого файла.)
Мой опыт (который не включает, как это может быть настроено в Eclipse) заключается в том, что ld
(который вызовет gcc) хочет получить имена библиотек без lib
префикс или .a
расширение. Пытаться:
gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw -lglfwdll
Я не уверен, что glfw.dll
файл должен быть указан как библиотека; библиотека импорта для этой DLL (я полагаю, это libglfwdll.lib) должна позаботиться о связывании с DLL.
Попробуй это:
gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a
Хотя это довольно старый вопрос, я столкнулся с этим вопросом из-за недавней проблемы, и решение сильно отличается от приведенного выше, поэтому я поделюсь им.
В моем случае из-за порядка $PATH оболочки (
echo $PATH
),
gcc
использовался из установки anaconda, и это
ld
не удалось найти конкретную библиотеку.
Простое изменение порядка путей решило эту проблему:
export PATH=/usr/bin:$PATH
Вредных эффектов нет, смотрите здесь .