2

선형 프로그래밍에 익숙하지 않고 C. 선형 계산식을 풀기 위해 lp_solve 라이브러리를 사용하려고합니다. 문제는 the demo code을 사용할 수 없다는 것입니다.리눅스에서 C/C++에서 lp_solve를 사용하려고 할 때 "정의되지 않은 참조"

the documentation에 설명 된대로 lp_solve_5.5_dev.gz을 내 Linux 컴퓨터에 다운로드했습니다. 나는 내 코드와 동일한 폴더에 파일을 추출 컴파일하려고 :

~/Desktop/Code/CA$ cc -o demo demo.c 
/tmp/ccpeN8ZV.o: In function `demo': 
demo.c:(.text+0x31): undefined reference to `make_lp' 
demo.c:(.text+0x62): undefined reference to `set_col_name' 
demo.c:(.text+0x7d): undefined reference to `set_col_name' 
demo.c:(.text+0xcf): undefined reference to `set_add_rowmode' 
demo.c:(.text+0x150): undefined reference to `add_constraintex' 
demo.c:(.text+0x1e6): undefined reference to `add_constraintex' 
demo.c:(.text+0x274): undefined reference to `add_constraintex' 
demo.c:(.text+0x29c): undefined reference to `set_add_rowmode' 
demo.c:(.text+0x30b): undefined reference to `set_obj_fnex' 
demo.c:(.text+0x327): undefined reference to `set_maxim' 
demo.c:(.text+0x33b): undefined reference to `write_LP' 
demo.c:(.text+0x34e): undefined reference to `set_verbose' 
demo.c:(.text+0x359): undefined reference to `solve' 
demo.c:(.text+0x383): undefined reference to `get_objective' 
demo.c:(.text+0x3a6): undefined reference to `get_variables' 
demo.c:(.text+0x3d2): undefined reference to `get_col_name' 
demo.c:(.text+0x429): undefined reference to `delete_lp' 
collect2: ld returned 1 exit status 

을 나는 다음과 같은 오류를 얻을 명령에 liblpsolve55.a을 추가 할 때 :

~/Desktop/Code/CA$ cc -o demo demo.c liblpsolve55.a 
liblpsolve55.a(lp_lib.o): In function `scaled_floor': 
lp_lib.c:(.text+0x6923): undefined reference to `floor' 
liblpsolve55.a(lp_lib.o): In function `scaled_ceil': 
lp_lib.c:(.text+0x6f03): undefined reference to `ceil' 
liblpsolve55.a(lp_lib.o): In function `set_XLI': 
lp_lib.c:(.text+0x7aa2): undefined reference to `dlclose' 
lp_lib.c:(.text+0x7bb3): undefined reference to `dlopen' 
lp_lib.c:(.text+0x7bd1): undefined reference to `dlsym' 
lp_lib.c:(.text+0x7d8a): undefined reference to `dlsym' 
lp_lib.c:(.text+0x7da6): undefined reference to `dlsym' 
lp_lib.c:(.text+0x7dc2): undefined reference to `dlsym' 
liblpsolve55.a(lp_lib.o): In function `set_BFP': 
lp_lib.c:(.text+0x7eb4): undefined reference to `dlclose' 
lp_lib.c:(.text+0x7fc3): undefined reference to `dlopen' 
lp_lib.c:(.text+0x7fe1): undefined reference to `dlsym' 
lp_lib.c:(.text+0x831a): undefined reference to `dlsym' 
lp_lib.c:(.text+0x8336): undefined reference to `dlsym' 
lp_lib.c:(.text+0x8352): undefined reference to `dlsym' 
lp_lib.c:(.text+0x836e): undefined reference to `dlsym' 
liblpsolve55.a(lp_lib.o):lp_lib.c:(.text+0x838a): more undefined references to `dlsym' follow 
................ 

나는 lp_solve 라이브러리 것으로 알고 있습니다 내 코드에로드되지 않았습니다. lp_solve 라이브러리를 제대로 연결하는 방법을 알려주시겠습니까?

+2

웹에서 "dlsym ' "에 대한 정의되지 않은 참조를 찾으려고 했습니까? 당신은 당신이 빠진 것을 꽤 빨리 발견 할 것입니다. – DanielKO

+0

감사! 헤더 파일에 함수 정의가 아니라 선언이 포함되어 있는지 확인하십시오. 링커가 함수 정의를 찾을 수없는 것 같습니다. – zambro

답변

1

일부 컴파일러 플래그가 누락되어 적절한 라이브러리가 포함됩니다. danielko가 말했듯이 누락 된 도서관에 대한 빠른 Google 검색은 몇 가지 제안을합니다. 예 :

http://sourceforge.net/p/dev-cpp/discussion/48211/thread/3bd8b8a1

Linux c++ error: undefined reference to 'dlopen'

다음은 당신의 컴파일이 더 같은 것을해야한다 제안 :

cc -I/lp_solve_5.5 -I/lp_solve_5.5/bfp -I/lp_solve_5.5/bfp/bfp_etaPFI -I/lp_solve_5.5/colamd $src -o MyExe.exe -lm -ldl 
:

cc -o demo demo.c -ldl -llpsolve55 

lpsolve documentation는 프로젝트 디렉토리 등을 포함하는 명령을 제안한다

+1

답변의 컴파일 명령이 정확하지 않지만. 나는 당신이 올바른 방향으로 나를 가리키며 그것에 대해 감사했던 것처럼 당신의 대답을 받아들입니다! 다음을 사용하여 수학 및 lp_lib 정의되지 않은 참조를 해결했습니다. cc -o demo demo.c liblpsolve55.a -lm -ldl – zambro

+0

적어도 부분적으로 도움이되었습니다. 필자는 항상 링커 문제를 겪고 있으며, 어떤 라이브러리를 추가해야 하는지를 찾는 일은 항상 쉬운 일입니다. – vityav