2013-05-30 2 views
1

을 파일 : (동적 라이브러리) 낭포가이 같은 .so 파일 ++ C의 구조가 리눅스

Folder 1 (.d and .o extention files) 
Folder 2 (.d and .o extention files) 
Folder 3 (.d and .o extention files) 
processsignal.so 
makefile 
objects 
sources... 

너희들이 컴파일하고 위의 파일을 실행하는 방법을 알고 계십니까를, 내가 .so를 컴파일 시도

make: 
make: Nothing to be done for `Cartographie/ProcessingFit.d'. 
이 G로 컴파일 ++ :

g++ libsignalProcessing.so 
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start': 
(.text+0x18): undefined reference to `main' 
collect2: ld returned 1 exit status 
또한 메이크를 실행하지만 그것은 오류 남아
+0

확장자가 .d 인 파일은 어떤 종류입니까? – Claudio

+0

processsignal.so는 프로그램을 컴파일하는 데 필요한 컴파일 또는 라이브러리의 결과입니까? – Claudio

+3

귀하의 질문에 어떤 파일이 당신의 파일인지, 다른 사람이 제공 한 파일인지, 빌드 시스템에 의해 생성 된 파일인지, 어떤 종류의 빌드 시스템인지 등은 분명하지 않습니다. 명백히 실행 파일을 빌드하려고 시도하고 있습니다 (_not_ 라이브러리, 공유 또는 정적) 그리고'main' 함수는 없지만, 당신이하고있는 일을 분명히 할 때까지는 그것을 고치는 방법을 정말로 말할 수 없습니다. 아, 그리고 빌드 시스템을 언급하십시오 (automake입니까? cmake입니까? 아니면 손으로 직접 작성한 makefile입니까?) –

답변

0

프로그램에서 .so 파일을 사용하려면 gcc 컴파일러의 -l 플래그를 사용해야합니다. 당신은 당신이에/홈 libsomelib.so이있는 경우, 예를 들어, .so를

의 위치에 LD_LIBRARY_PATH을 설정해야합니다, 그렇게하기 전에/코드 디렉토리는 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/code 다음 export LD_LIBRARY_PATH로 LD_LIBRARY_PATH를 설정합니다. echo $LD_LIBRARY_PATH으로 테스트하십시오. 라이브러리 위치를 제공해야합니다. 이 .so를를 사용하고자하는 프로그램의 다음

g++ -L ../code abc.cpp -lsomelib

여기 생산 코드에 대한 확실하지 않지만, 이것은 일반적입니다 프로그램은 다음을 라이브러리로,를 사용하는 경우 엔트리 포인트가 main 일 수 없습니다.