2012-07-02 2 views
0

보안상의 이유로 정적으로 프로그램을 링크해야합니다.Soci를 linux/우분투의 정적 라이브러리로 사용 하시겠습니까?

내 백엔드가 postgresql 인 libsoci_core.a 및 libsoci_postgresql.a 정적 라이브러리를 만들었습니다.

제 문제는 이러한 라이브러리로 프로그램을 빌드 할 때 링크 오류가 발생한다는 것입니다.

[...]/lib 디렉토리/libsoci_core.a (백엔드 loader.cpp.o) : 기능에서 `(익명 네임 스페이스) :: do_unload (표준 : : basic_string, 표준 : : 할당> CONST &)는 '

는 백엔드 loader.cpp :(텍스트 + 0x623)

:.`우 dlclose에 정의되지 않은 참조'백엔드 loader.cpp의 코드를 보면

, 그것은 우 dlclose 및 동적 기타를 호출 라이브러리 로딩 기능.

그래서 이러한 오류를 피하고 '정적'정적 빌드가 가능한지 궁금합니다.

이 오류가 발생하지 않도록하려면 어떤 옵션을 사용해야하며 코드가 정적 posgresql 라이브러리를 호출합니까?

감사합니다.

답변

1

정적으로 링크 된 라이브러리를 작성하려고하므로 dl * 기능을 제거/스텁 아웃해야합니다.

한 가지 방법은 고유 한 기능으로 dlstub.c 파일을 만들고이를 라이브러리에 링크하는 것입니다.

#include <dlfcn.h> 

int dlclose(void *){} 
char *dlerror(void){} 
void *dlopen(const char *, int){} 
void *dlsym(void *restrict, const char *restrict){} 

는 * .o 인 파일로 스텁 함수를 컴파일하고 컴파일 명령에 연결 :

gcc -c -O2 -g dlstubs.c 
gcc -static ... -o dlstubs.o ... 
+0

(/usr/include/dlfcn.h)에서 프로토 타입을 사용

너, 이걸 시도해! – unludo

관련 문제