GCC, связывающий библиотеки, не найден? - PullRequest
3 голосов
/ 16 апреля 2011
  • ОС: 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: не удается найти -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, но он все еще не может их найти.

Ответы [ 3 ]

8 голосов
/ 16 апреля 2011

Майкл Барр указал правильный способ ссылки на библиотеки в командной строке. Путь к библиотеке задается с помощью переключателя -L, а имя библиотеки - с переключателем -l (имя библиотеки является именем файла, без части lib в начале и символа .a суффикс в конце).

Еще одна вещь, на которую следует обратить внимание, это то, что вы пытаетесь связать как статическую (libglfw.a), так и динамическую (glfw.dll) версию библиотеки, которые оба включены в загрузку, одновременно время. Вместо этого вы должны выбрать один, основываясь на ваших потребностях / желаниях, и ссылаться только на него.

Связать со статической версией просто. Просто добавьте -lglfw в командную строку.

Чтобы использовать динамическую библиотеку, вы должны связать библиотеку импорта для dll (libglfwdll.a), используя переключатель -lglfwdll, и пропустить саму dll из команды link. По сути, библиотека импорта не содержит никакого объектного кода, а содержит только определения; Фактический код находится в DLL. DLL будет динамически связан во время выполнения. (Чтобы это работало, система должна быть в состоянии найти dll; то есть она должна находиться в текущем рабочем каталоге, в каталоге, который находится в пути, или ее каталог должен быть добавлен в специальную переменную среды, используемую для этого, но для того, чтобы это стало важным, сначала нужно добиться успеха в создании исполняемого файла.)

4 голосов
/ 16 апреля 2011

Мой опыт (который не включает, как это может быть настроено в 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.

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

Попробуйте это:

gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a
...