Мне сложно определить, какие флаги передать g ++ при выполнении связывания. В принципе, я компилировать код с этими "стандартными" флагами:Связывание объектов и статических библиотек
CXXFLAGS = -Wall -Wextra -Wconversion -pedantic -std=c++0x -O2
и, после этого, я объединить полученные .o файлы в нескольких статических библиотеках, как так:
libxxx.a: xxx1.o xxx2.o ...
ar rcs [email protected] $^
libyyy.a: yyy1.o yyy2.o ...
ar rcs [email protected] $^
...
Вопросов:
- Должен ли я использовать флаг
-static
в CXXFLAGS при компиляции файлов .o?
После создания статических библиотек, я хочу, чтобы связать некоторые скомпилированные .o файлы вместе с некоторыми из этих библиотек в целях создания исполняемого файла, поэтому я использую это:
LINKER = g++
LIB_DIR = lib/linux
SYSTEM_LIBS = -lgmp
LDFLAGS = -Wall -L $(OUTPUT_DIR) -L $(LIB_DIR) $(SYSTEM_LIBS)
$(LINKER) $^ $(LDFLAGS) -lsvm -lUtils -lKinderedSpirits -o [email protected]
exe:
$(LINKER) o1.o o2.o $(LDFLAGS) -lxxx -lyyy -lzzz -o [email protected]
Вопросы:
- Должен ли я использовать флаг
- Имеет ли смысл -static
здесь?
-Wall
или он полезен только для компиляции? - Существуют ли какие-либо другие «стандартные» флаги, которые необходимо передать компоновщику, аналогичные тем, которые рекомендованы для компилятора?
Кроме того, при связывании это дает мне исключения о неопределенных ссылках из библиотеки GMP. Насколько я могу судить, -lgmp отправляется в компоновщик, и он устанавливается в систему (я смог скомпилировать простой мир привет, который использует GMP из командной строки) и libxxx.a libyyy.a libzzz.a расположенный в $ (LIB_DIR). Может быть, я должен упомянуть, что символы GMP используются в libxxx.a.
UPDATE:
мне удалось зафиксировать неопределенные ссылки для GMP символов. Проблема была вызвана порядком, в котором я размещал библиотеки. В принципе, как указано here, мне нужно обратиться к библиотекам, которые зависят от GMP до -lgmp. Во всяком случае, я все еще ищу ответы на мои вопросы выше.
Когда вы говорите «статическая библиотека», вы имеете в виду, что вы создали файл статической библиотеки .a, возможно, используя ar? – loki11
Да, это так. Я отредактирую вопрос, чтобы уточнить. –