3

Postgresql libecpg-dev 패키지에서 libecpg, libpq 및 libpgtypes 라이브러리를 필요로하는 C 프로그램의 정적 실행 파일을 빌드하려고합니다. 정적 라이브러리 libecpg.a, libpq.a, libpgtypes.a는 모두 동적 버전 인/usr/lib와 같은 위치에 있습니다. 어쨌든 경로로 -L 옵션을 추가하려고 시도했지만 동일한 결과를 얻습니다.정적 실행 파일을 빌드하기 위해 정적 라이브러리에 연결하기

내 실행 파일은 사용자가 라이브러리를 시스템에 설치하여 사용할 수 있도록 이진 파일을 이식 할 수 있도록 정적이어야합니다. 나는 동적 라이브러리와 함께 다음 명령을 사용할 때 프로그램이 잘 구축 :

gcc main.o -lecpg -lpq -lpgtypes -I/usr/include/postgresql -o program_name 

것은 내가 정적에 연결하려고합니다 (-I 디렉토리는 PostgreSQL의 기능 내가 사용의 일부에 포함되어야한다) 라이브러리에서 다음 명령을 사용하고 있습니다 :

gcc -static main.o -lecpg -lpq -lpgtypes -I/usr/include/postgresql -o program_name 

그러나 컴파일러는 출력으로 "정의되지 않은 참조"오류의 긴 목록을 제공합니다. 이 때문에 많은 사람들이 있지만, 여기에 작은 샘플링입니다 다음과 같이 내가 순서를 변경하면

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libecpg.a(descriptor.o): 
In function `get_descriptors': 
(.text+0xc3): undefined reference to `pthread_once' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libecpg.a(descriptor.o): In function `ECPGdeallocate_desc': 
(.text+0x2c6): undefined reference to `pthread_setspecific' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libecpg.a(descriptor.o): In function `ECPGallocate_desc': 
(.text+0x376): undefined reference to `pthread_setspecific' 
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libecpg.a(descriptor.o): In function `get_descriptors': 
(.text+0xd2): undefined reference to `pthread_getspecific' 

:

컴파일러 출력은 대신 다음 (다시 한 번, 단지 작은 샘플링과 같은
gcc -I/usr/include/postgresql -static -lecpg -lpq -lpgtypes -o program_name main.o 

) :

main.c:(.text+0x5c6): undefined reference to `ECPGconnect' 
main.c:(.text+0x83e): undefined reference to `ECPGdo' 
main.c:(.text+0x843): undefined reference to `ECPGget_sqlca' 
main.c:(.text+0x85c): undefined reference to `ECPGdisconnect' 
main.c:(.text+0x87c): undefined reference to `ECPGget_sqlca' 

나는) 모든 주위에 (다른 모든 옵션과 함께 -I 옵션을 사용하여 시도했지만 아무것도 작동하는 것 같다 없습니다.

답변

0

그렇게 그것을 시도 :

gcc main.o /usr/include/postgresql/libecpg.a /usr/include/postgresql/libecpg.a /usr/include/postgresql/libpq.a /usr/include/postgresql/libpgtypes.a -o program_name 
관련 문제