Статическая библиотека не включена в итоговый исполняемый файл LLVM - PullRequest
1 голос
/ 06 апреля 2010

Я пытаюсь скомпилировать программу переменного тока, используя LLVM, и у меня возникают проблемы с включением некоторых статических библиотек.Я успешно скомпилировал эти статические библиотеки, используя LLVM, и, например, присутствует libogg.a, как и ogg.l.bc.

Однако, когда я пытаюсь собрать финальную программу, она не включаетстатическая библиотека ogg.Я пробовал различные варианты компилятора, наиболее заметным из которых было:

gcc oggvorbis.c -O3 -Wall -I$OV_DIR/include -l$OV_DIR/lib/libogg.a -l$OV_DIR/lib/libvorbis.a -o test.exe

Это приводит к следующему выводу (каталоги сокращены для краткости):

$OV_DIR/include/vorbis/vorbisfile.h:75: warning: ‘OV_CALLBACKS_DEFAULT’ defined but not used
$OV_DIR/include/vorbis/vorbisfile.h:82: warning: ‘OV_CALLBACKS_NOCLOSE’ defined but not used
$OV_DIR/include/vorbis/vorbisfile.h:89: warning: ‘OV_CALLBACKS_STREAMONLY’ defined but not used
$OV_DIR/include/vorbis/vorbisfile.h:96: warning: ‘OV_CALLBACKS_STREAMONLY_NOCLOSE’ defined but not used
llvm-ld: warning: Cannot find library '$OV_DIR/lib/ogg.l.bc'
llvm-ld: warning: Cannot find library '$OV_DIR/lib/vorbis.l.bc'
WARNING: While resolving call to function 'main' arguments were dropped!

Я нахожу это недоумением, потому чтоOV_DIR / lib / ogg.l.bc существует, как и vorbis.l.bc, и оба они доступны для чтения (как и содержащие их каталоги) всем.

Кто-нибудь имеет представление о том, что я делаюне так?

Спасибо,

Мэтт

Ответы [ 2 ]

3 голосов
/ 06 апреля 2010

Как было сказано, -l сопровождается именем библиотеки.

Например, в соглашениях по именованию библиотек Linux, если библиотека называется libogg,

-logg найдет и выберет * лучшее совпадение в каталогах библиотеки.

Вы можете добавить каталог в список:

  1. -L является одним из способов временного добавления следующей папки в список.
  2. Переменная среды LD_LIBRARY_PATH также влияет на список в большинстве Linux / Unix> с инструментами GNU.

gcc может найти как статические, так и совместно используемые файлы библиотеки, имя которых совпадает с запрошенным именем библиотеки.

Например,

libogg.a libogg.so

Вот почему есть опция gcc, -static

-static
В системах, которые поддерживают динамическое связывание, это предотвращает связывание с общими библиотеками. На других В системах этот параметр не действует.

Если вы просто хотите использовать файл общей или статической библиотеки - напрямую, просто как объектный файл, затем укажите свой путь без каких-либо опций, например

gcc oggvorbis.c the_path/libogg.a
0 голосов
/ 06 апреля 2010

Я не думаю, что опция -l ожидает пути. Вы должны разделить их и использовать опцию -L, чтобы установить пути, а затем просто использовать простые имена библиотек с -l:

$ gcc oggvorbis.c -O3 -Wall -I$OV_DIR/include -L$OV_DIR/lib -logg -lvorbis -o test.exe

Также обратите внимание, что при таком использовании вы не включаете части "lib" и ".a" в имя библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...