2017-03-29 4 views
0

공유 라이브러리 파일에 독점적 인 function을 사용하는 C 프로그램을 컴파일하고 가장 중요하게 링크해야합니다. 이전 개발 팀과의 의사 소통 부족으로 인해 적절한 문서가 없습니다.공유 라이브러리를 Linux에서 gcc와 연결

gcc -L/customlibs testing.c -o testing -lcustom 
: 그 함수 이름이 /customlibs/libcustom.so에서 grepped 될 수 있기 때문에

int CustomFunction(unsigned char *in, int size); 

, 내가 코드를 컴파일하고 이런 식으로 연결을 시도 : 나는 (내가 수와 인수의 유형을 알고 있기 때문에) 함수 프로토 타입을 선언 이처럼 보이는 몇 가지 오류 메시지가 발생

: 분명히

/customlibs/libcustom.so: undefined reference to `AnotherCustomFunction' 

, 나는 하시다 일을 할뿐만 아니라, 다른 라이브러리를 포함하도록 링커 얘기하고, 필요 rse, 그들은 특정 순서에 있어야합니다. 을 -Wl,-rpath=, -Wl,--no-undefined-Wl,--start-group을 사용하여 내보내기를 시도했습니다. 링커에게 적절한 순서없이 모든 .so 파일을주는 쉬운 방법이 있습니까?

답변

0

명령 줄에 추가하면됩니다. 아래에서 이와 같은 것입니다. LD_LIBRARY_PATH는 gcc에게 라이브러리를 찾을 위치를 알려주지 만 포함시킬 라이브러리를 지정해야합니다.

GCC -L/customlibs testing.c -o 테스트 -lcustom -lmylib1 -lmylib2 -lmylib3

+0

나는 그것을 시험해 보았다. 그리고 그것은 더 많은 정의되지 않은 참조에 관하여 불평한다. – Ulrik

+3

Ulrik, 어느 쪽을 언급 하느냐? libs를 추가해야합니다 ... 그리고 모든 공유 라이브러리에서'ldd' 명령을 사용하여 의존하는 라이브러리를 추출한 다음 [topological sort] (https://en.wikipedia.org/wiki/Topological_sorting) 명령을 사용하십시오. 또는 링크 명령 ([- ('와'-)'옵션 쌍 사이에] [(http://stackoverflow.com/a/5651895/196561))에 모든 것을 추가하려고하면됩니다. – osgx

+0

'-Wl, - start-group -lcustom1 -lcutom2 ... -Wl, -end-group'과 함께 모든 공유 라이브러리를 추가하면'/customlibs/libcustom.so : undefined reference 'AnotherCustomFunction'으로 – Ulrik

1

또한 예를 들어, GCC의 -I 옵션을 추가하여 공유 라이브러리의 모든 헤더 파일을 포함해야 : gcc [...] -I/path/to/your/lib/header/files [...]

0

내 문제의 해결책 (또는 해결 방법)을 찾았습니다 : -Wl,--warn-unresolved-symbols을 추가하면 경고가 경고로 바뀝니다. 이 기능은 사용자의 기능이 undefined refernce to: 메시지에 언급 된 기호에 의존하지 않는다고 절대적으로 확실한 경우에만 작동합니다.