공유 라이브러리 파일에 독점적 인 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
파일을주는 쉬운 방법이 있습니까?
나는 그것을 시험해 보았다. 그리고 그것은 더 많은 정의되지 않은 참조에 관하여 불평한다. – Ulrik
Ulrik, 어느 쪽을 언급 하느냐? libs를 추가해야합니다 ... 그리고 모든 공유 라이브러리에서'ldd' 명령을 사용하여 의존하는 라이브러리를 추출한 다음 [topological sort] (https://en.wikipedia.org/wiki/Topological_sorting) 명령을 사용하십시오. 또는 링크 명령 ([- ('와'-)'옵션 쌍 사이에] [(http://stackoverflow.com/a/5651895/196561))에 모든 것을 추가하려고하면됩니다. – osgx
'-Wl, - start-group -lcustom1 -lcutom2 ... -Wl, -end-group'과 함께 모든 공유 라이브러리를 추가하면'/customlibs/libcustom.so : undefined reference 'AnotherCustomFunction'으로 – Ulrik