연결을 수행 할 때 g ++에 전달할 플래그를 파악하는 데 어려움을 겪고 있습니다.개체 및 정적 라이브러리 연결
libxxx.a: xxx1.o xxx2.o ...
ar rcs [email protected] $^
libyyy.a: yyy1.o yyy2.o ...
ar rcs [email protected] $^
...
질문 :
내가 지금처럼 여러 정적 라이브러리로 .o 인 생산 파일을 병합, 이후,CXXFLAGS = -Wall -Wextra -Wconversion -pedantic -std=c++0x -O2
과 : 기본적으로, 나는이 "표준"플래그와 함께 몇 가지 코드를 컴파일
- .o 파일을 컴파일 할 때 CXXFLAGS에
-static
플래그를 사용해야합니까?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]
질문 : 정적 라이브러리를 만든 후
, 그래서 내가 이것을 사용하는 실행 파일을 구축하기 위해 이러한 라이브러리의 일부와 함께 일부에서는 .o 컴파일 된 파일을 링크 할
- 여기에
- -static
플래그를 사용해야합니까?
-Wall
이 여기에 의미가 있습니까? 아니면 컴파일하는 데 유용합니까? - 컴파일러에서 권장하는 것과 비슷한 링커에 전달해야하는 다른 "표준"플래그가 있습니까?
또한 연결하는 동안 GMP 라이브러리에서 정의되지 않은 참조에 대한 예외가 발생합니다. 내가 말할 수있는 한 -lgmp가 링커에 보내졌고 시스템에 설치되었다. (나는 명령 행에서 GMP를 사용하는 간단한 hello world를 컴파일 할 수 있었다) libxxx.a libyyy.a libzzz.a는 $ (LIB_DIR)에 있습니다. 어쩌면 GMP 기호가 libxxx.a에서 사용된다는 것을 언급해야합니다.
UPDATE는 :
은 내가 GMP 기호에 대한 정의되지 않은 참조를 해결하기 위해 관리. 문제는 제가 도서관을 배치 한 순서에 기인합니다. 기본적으로, 지정된 here으로, -lgmp 전에 GMP에 의존하는 라이브러리를 참조해야합니다. 어쨌든, 위의 질문에 내 대답 에 대한 답변을 찾고 있습니다.
"정적 라이브러리"라고하면 실제로 ar을 사용하여 .a 정적 라이브러리 파일을 만들었습니다. – loki11
네, 맞습니다. 나는 명확하게하기 위해 질문을 편집 할 것이다. –