2010-12-06 3 views
2

c 및 x.so 공유 라이브러리를 생성하는 데 사용합니다. xc에 있습니다. 주 모듈에있는 몇 가지 기능을 사용하고 싶습니다. 메인 파일과 exe), 일종의 재귀 dependeny. (x.c에서 해당 함수를 복사하지 않고)이 작업을 수행하는 방법은 무엇입니까? -rdynamic에 대해 읽었지만 완전히 얻을 수 없습니다. 내가 컴파일 할 때 'somefunc'선언이 없습니다. 날 감사C에서 공용 라이브러리 파일의 주 프로그램 파일에서 함수를 사용하는 방법

을 알려 주시기 바랍니다 (somefunc 내가 XC에서 통근 somefunx을했지만 작동하지 않았다, 메인 모듈에)
+0

어떤 OS 및 컴파일러입니까? 당신은'somefunc()'를 사용하려고 무엇을 했습니까? 여기에 게시 할 수있는 방법으로 손질하지 않아도됩니다. –

답변

2

당신은 함수 포인터 인수를 전화를 철회하기 위해 공유 라이브러리에 영향을받는 방법을 정의하고 수 호출 시간에 주 모듈의 기능을 인수로 전달합니다. 예 :

// Library 
void dosomething (int arg, void (*callback)(void)) { ... } 

// Main module 
void called_from_lib(void) { ... } 

dosomething(10, called_from_lib); 
0

유닉스와 비슷합니다. 컴파일시에 참조하지 않고 프로그램에 링크하지 않고 라이브러리의 함수를 동적으로 호출 할 수있는 함수 dlopen()이 있습니다. dlopen()은 POSIX이므로 현대적인 유닉스 상자에 있어야합니다. 여기

예 :

http://www.dwheeler.com/program-library/Program-Library-HOWTO/x172.html 

또한 LD_LIBRARY_PATH 있습니다. 이 환경 변수를 사용하면 동일한 코드를 사용할 수 있지만 컴파일시에는 없었던 라이브러리로 대체 할 수 있습니다. 이것은 정확히 당신이 요구하는 것이 아니지만, dlopen에 의지하지 않고서는 adhoc 공유 라이브러리를 사용하는 라인을 따라 뭔가를하도록 만들 수 있습니다. HPUX와 같은 일부 시스템은 SHLIB_PATH도 지원합니다.

관련 문제