Поставьте библиотеку и не добавляйте lib*.a

Я думаю, что видел, как это сделать где-то, но не могу переосмыслить это. Пример:

gcc -Ldir -lfoo

Я хочу, чтобы компоновщик искал dir / foo, а не dir / libfoo.a без необходимости писать dir / foo (в dir много файлов, и запуск ar сначала неуклюже).

РЕДАКТИРОВАТЬ: руководство sais

Добавить каталог dir в список каталогов для поиска -l

а также

Единственная разница между использованием параметра -l и указанием имени файла заключается в том, что -l окружает библиотеку "lib" и ".a" и ищет несколько каталогов.

Я хочу, чтобы поиск поведения в каталогах, заданных -L, не прерывал имя файла. Это возможно.

РЕДАКТИРОВАТЬ 2:

В руководстве по ld я обнаружил, что -l:foo делает именно то, что я хочу, и это происходит в gcc. Это поведение официально поддерживается?

1 ответ

Решение

От ld справочная страница:

   -l namespec
   --library=namespec
       Add the archive or object file specified by namespec to the list of
       files to link.  This option may be used any number of times.  If
       namespec is of the form :filename, ld will search the library path
       for a file called filename, otherwise it will search the library
       path for a file called libnamespec.a.

       On systems which support shared libraries, ld may also search for
       files other than libnamespec.a.  Specifically, on ELF and SunOS
       systems, ld will search a directory for a library called
       libnamespec.so before searching for one called libnamespec.a.  (By
       convention, a ".so" extension indicates a shared library.)  Note
       that this behavior does not apply to :filename, which always
       specifies a file called filename.

Так что используйте -l:foo,

Другие вопросы по тегам