2011-02-06 6 views
1

나는 C++ 응용 프로그램에서 루아를 내장하고 있는데 다음 링크 오류가 점점 오전 : 이러한 오류가 발생하는 이유임베딩 루아 : 연결 문제 (liblua5.1.a)

g++  -o dist/Debug/GNU-Linux-x86/testluaembed build/Debug/GNU-Linux-x86/src/main.o build/Debug/GNU-Linux-x86/src/LuaBinding.o -L../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86 -L../../mainline/tanlib++/dist/Debug/GNU-Linux-x86 -L/usr/lib ../../mainline/tanlib_core/dist/Debug/GNU-Linux-x86/libtanlib_core.so ../../mainline/tanlib++/dist/Debug/GNU-Linux-x86/libtanlibpp.so /usr/lib/liblua5.1.a /usr/lib/libtolua++5.1.a /usr/local/boost_1_45_0/stage/lib/libboost_filesystem.a /usr/local/boost_1_45_0/stage/lib/libboost_system.a 
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc': 
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc': 
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc': 
/usr/lib/liblua5.1.a(loadlib.o): In function `ll_loadfunc': 
/usr/lib/liblua5.1.a(loadlib.o): In function `gctm': 
collect2: ld returned 1 exit status 
make[2]: *** [dist/Debug/GNU-Linux-x86/testluaembed] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 

누구나 알고있는, 그리고 어떻게 고칠 수 있니? http://lua-users.org/wiki/BuildingLua

에서

+0

정말 오류입니까? '-Wl, -v'를 사용하여'-v' (verbose) 옵션을 링커에 넘겨 주면 어떻게됩니까? 아마도 입력 파일이나 기호가 누락 된 것처럼 보입니다. – Cascabel

+0

@ 제프롬미 : 당신 말이 맞아요. 정적 아카이브 파일 대신 so 파일을 추가해야합니다. 지금은 – oompahloompah

답변

2

는 메모가 : C++ 응용 프로그램에서 루아를 삽입에

루아는 ANSI C의 깨끗한 부분 집합이며, C 또는 C로 컴파일 할 수 있습니다 ++ . 루아 헤더는 {#ifdef __cplusplus extern "C"{#endif ... 루아 헤더 ... # ifdef __cplusplus} #endif}와 함께 나오지 않으므로 루아는 C 또는 C++로 컴파일 될 수 있습니다. 파일 내용을 변경하지 않고도 파일을 저장할 수 있습니다.

루아가 미리 패키지 된 바이너리와 함께 C 라이브러리로 컴파일 된 경우, C++ 응용 프로그램 (예 : 링크 C에서 C++)에 Lua를 임베드하기 위해 포함 주위에 extern "C"를 배치해야합니다 예를 들어, 당신의 C++ 응용 프로그램에서 루아 헤더의

extern "C" { 
#include "lua.h" 
} 

이렇게하지 않으면 당신 때문에 C++ 이름 맹 글링의 링크 오류가 발생할 수 있습니다.

메일 링리스트에 불만을 제기하지 마십시오. :-) 메일 링리스트를 검색하는 시간은 전에 여러 번 적용되었으므로 가져 가라.

라이브러리의 미리 패키지 된 바이너리를 배포하는 경우 lua 코어를 C (가장 가능성 있음) 또는 C++로 컴파일했고 C로 루아를 컴파일 한 경우 이를 나타 내기 위해 lua 헤더를 수정하십시오. 그러나 lua 용으로 미리 빌드 된 라이브러리를 사용하는 것은 저자가 권장하지 않으므로 루아 소스를 애플리케이션에 직접 통합하는 것이 좋습니다. 자세한 내용은 BuildingModules (페이지 끝 부분)을 참조하십시오.

기본적으로 lua 5.1 이상을 C++로 컴파일하면 컴파일 할 때 구성 할 수 있지만 C++ 예외를 사용하여 longjmp/setjmp 대신 스택을 푸십시오. 이에 대한 설명은 LUAI_THROW/LUAI_TRY 근처의 luaconf.h를 참조하십시오.

+0

에서 작동합니다. 또한'lauxlib.h'와'lualib.h'가 같은 방식으로 포함될 필요가 있다는 점에 유의할 가치가 있습니다. –

1

당신의 C++ 소스에 lua.hpp를 넣을 수 있습니다