GCC, линковка библиотек, не найдена?

  • ОС: Windows 7 Pro X64
  • IDE: Eclipse IDE для разработчиков C / C ++
  • Компилятор: MinGW (последний, 4.5.2)

Компиляция HelloWorld.c работает; но когда я пытаюсь добавить какие-то внешние библиотеки, он задыхается.

Я добавил файлы .a и .dll в свои «Библиотеки»; добавьте путь как к PATH, так и к пути к библиотеке. Я также поместил включаемые файлы и настроил Include. Считается, что библиотеки, которые у меня есть, совместимы с 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.ac: / 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, но он все еще не может их найти.


person user697111    schedule 15.04.2011    source источник
comment
Убедитесь, что вы добавили библиотеки в путь к библиотекам Eclipse.   -  person Dhaivat Pandya    schedule 16.04.2011
comment
-LC: \ rhino \ data \ libs -LC: \ rhino \ data \ lib   -  person user697111    schedule 16.04.2011
comment
Что такое ld командная строка?   -  person Michael Burr    schedule 16.04.2011
comment
Нет, это gcc:   -  person user697111    schedule 16.04.2011
comment
gcc -LC: \ rhino \ data \ libs -LC: \ rhino \ data \ lib -oTestC.exe TestC.o -lglfw.dll -llibglfw.a -llibglfwdll.a ### Они находятся в этом каталоге: C: \ носорог \ данные \ библиотека   -  person user697111    schedule 16.04.2011


Ответы (3)


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

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

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

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

person eriktous    schedule 16.04.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.

person Michael Burr    schedule 16.04.2011
comment
Вы также можете ссылаться на библиотеки DLL в последних версиях GCC. вам также необходимо добавить путь к DLL в параметр -L. - person rubenvb; 16.04.2011
comment
@rubenvb: интересно - я этого не знал. Теперь возникает вопрос: почему компоновщик MSVC не позволяет это сделать и что заняло так много времени? - person Michael Burr; 16.04.2011
comment
ну можно, через LoadLibrary и связанную с этим неразбериху. Что до того, что длилось так долго; Я не знаю точно, когда это было реализовано, но кажется, что где-то до / около 2007 года просматривал старые сообщения на форуме ... - person rubenvb; 17.04.2011

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

gcc -LC:\rhino\data\libs -LC:\rhino\data\lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a
person TonyK    schedule 15.04.2011
comment
C: \ rhino \ EProjects \ TestC \ Debug ›gcc -LC: \ MinGW \ lib -oTestC.exe TestC.o -lglfw libglfw.a libglfwdll.a gcc: libglfw.a: Нет такого файла или каталога gcc: libglfwdll.a : Нет такого файла или каталога C: \ rhino \ EProjects \ TestC \ Debug ›gcc -LC: \ MinGW \ lib -oTestC.exe TestC.o -lglfw libglfw libglfwdll gcc: libglfw: Нет такого файла или каталога gcc: libglfwdll: Нет такой файл или каталог C: \ rhino \ EProjects \ TestC \ Debug ›gcc -LC: \ MinGW \ lib -oTestC.exe TestC.o -lglfw -llibglfw.a libglfwdll.a gcc: libglfwdll.a: такого файла или каталога нет - person user697111; 16.04.2011
comment
C: \ rhino \ EProjects \ TestC \ Debug ›gcc -LC: \ MinGW \ lib -oTestC.exe TestC.o -lglfw -llibglfw.a -llibglfwdll.ac:/mingw/bin/../lib/gcc/mingw32 /4.5.2/../../../../mingw32/bin/ld.exe: не удается найти -llibglfw.ac:/mingw/bin/../lib/gcc/mingw32/4.5.2/ ../../../../mingw32/bin/ld.exe: не удается найти -llibglfwdll.a collect2: ld вернул 1 статус выхода - person user697111; 16.04.2011
comment
c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 / bin / ld.exe: не удается найти C: \ rhino \ EProjects \ TestC \ Отладка ›gcc -LC: \ MinGW \ lib -oTestC.exe TestC.o -lglfw -llibglfw -llibglfwdll c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../. ./../mingw32/bin/ld.exe: не удается найти -llibglfw c: / mingw / bin /../ lib / gcc / mingw32 / 4.5.2 /../../../../ mingw32 /bin/ld.exe: не удается найти -llibglfwdll collect2: ld вернул 1 статус выхода -llibglfw.ac:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../ ../mingw32/bin/ld.exe: не удается найти -llibglfwdll collect2: ld вернул 1 статус выхода - person user697111; 16.04.2011