Как я могу определить путь к библиотеке foo, используя g ++ -Lhere -Lthere -lfoo, без создания объекта? - PullRequest
2 голосов
/ 08 июля 2010

Я хотел бы отобразить явный путь к библиотеке, которая будет использоваться на этапе компиляции. Я хочу сделать это, чтобы добавить библиотеку в качестве зависимости в отдельный объектный файл.

Другими словами, я часто делаю ссылки, используя:

g ++ myFile.cpp -Lsomewhere -Lelse -Lhere -Lthere -lfoo

Есть ли способ заставить g ++, ld, ldd или что-то еще разрешить '-lfoo' с помощью -L без фактической привязки чего-либо, чтобы я мог использовать явный путь в качестве зависимости? Для получения более подробной информации см. Makefile Обновленная зависимость библиотеки .

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Это не идеально, и я надеюсь, что есть более четкий ответ, но вы можете получить пути поиска по умолчанию из gcc, а затем искать в каждом из них файлы. Вот это в GNU make:

libnams = foo bar
dirs = somewhere else here there
dirs += $(subst :, ,$(subst =,,$(word 2,$(shell gcc -print-search-dirs | grep libraries))))
exts = a so
paths = $(foreach L, $(libnams), \
           $(firstword $(foreach D, $(dirs), \
              $(foreach E, $(exts), \
                 $(wildcard $(D)/lib$(L).$(E))))))
1 голос
/ 09 июля 2010

Поскольку вы знаете порядок, в котором компоновщик ищет каталоги в поисках нужной библиотеки ( см. Руководство ), вы можете использовать Make's vpath, чтобы искать их в том же порядке:

vpath %.so somewhere else here there

otherObjectFile: foo.so
  #whatever...
...