2017-03-17 1 views
0

-lboost_python 내 프로젝트에 정적으로 링크해야합니다.부스트 :: 파이썬 정적 연결

CC=g++ 
override CFLAGS+=-c -std=c++11 -Wall -Wextra -Werror 
override LFLAGS+=-lboost_python -lpthread -lboost_filesystem -lboost_system -lboost_thread -lcrypto 

client: clientmain.o client.o ccommand.o 
    $(CC) $(LINK) ../build/datatype.o ../build/utility.o build/clientmain.o build/client.o build/ccommand.o -o \ 
     build/mylib.so $(LFLAGS) 
clientmain.o: main.cpp 
    $(CC) $(CFLAGS) -fPIC main.cpp -o build/clientmain.o 
client.o: cclient.cpp 
    $(CC) $(CFLAGS) -fPIC cclient.cpp -o build/client.o 
ccommand.o: ccommand.cpp 
    $(CC) $(CFLAGS) -fPIC ccommand.cpp -o build/ccommand.o 

하는 $ (LINK)는 "이 -shared"모든 것이 잘 작동 : 여기 내 메이크입니다. 그러나 $ (LINK)이 "-static"인 경우 링커 오류 "undefined symbol ..."이 많이 발생합니다.이 모든 것은 boost :: python과 관련이 있습니다. 다음은 그 중 일부입니다 (전체 목록은 여기에 게시하기에 정말 큰 것입니다) :

/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/Scrt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::call(boost::python::api::object const&)': 
(.text+0x20): undefined reference to `PyList_Type' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::call(boost::python::api::object const&)': 
(.text+0x35): undefined reference to `PyObject_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::list_base()': 
(.text+0x9a): undefined reference to `PyList_New' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::list_base(boost::python::api::object const&)': 
(.text+0x114): undefined reference to `PyList_Type' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::list_base(boost::python::api::object const&)': 
(.text+0x119): undefined reference to `PyObject_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::append(boost::python::api::object const&)': 
(.text+0x18d): undefined reference to `PyList_Type' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::append(boost::python::api::object const&)': 
(.text+0x1d1): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::append(boost::python::api::object const&)': 
(.text+0x254): undefined reference to `PyList_Append' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::extend(boost::python::api::object const&)': 
(.text+0x320): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::index(boost::python::api::object const&) const': 
(.text+0x441): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::index(boost::python::api::object const&) const': 
(.text+0x471): undefined reference to `PyLong_AsSsize_t' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop()': 
(.text+0x5ae): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop(long)': 
(.text+0x691): undefined reference to `PyLong_FromLong' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop(long)': 
(.text+0x6eb): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop(boost::python::api::object const&)': 
(.text+0x845): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::remove(boost::python::api::object const&)': 
(.text+0x960): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::reverse()': 
(.text+0xa4a): undefined reference to `PyList_Type' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::reverse()': 
(.text+0xa8b): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::reverse()': 
(.text+0xb11): undefined reference to `PyList_Reverse' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort()': 
(.text+0xbaa): undefined reference to `PyList_Type' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort()': 
(.text+0xbeb): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort()': 
(.text+0xc71): undefined reference to `PyList_Sort' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort(boost::python::detail::args_proxy const&, boost::python::detail::kwds_proxy const&)': 
(.text+0xd49): undefined reference to `PyObject_Call' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::count(boost::python::api::object const&) const': 
(.text+0xef1): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::count(boost::python::api::object const&) const': 
(.text+0xf21): undefined reference to `PyLong_AsSsize_t' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)': 
(.text+0x1033): undefined reference to `PyList_Type' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)': 
(.text+0x1072): undefined reference to `PyLong_FromLong' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)': 
(.text+0x1095): undefined reference to `PyEval_CallFunction' 
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)': 
(.text+0x1134): undefined reference to `PyList_Insert' 

내 Makefile에는 어떤 문제가 있습니까?

답변

1

잃어버린 기호는 확실히 libpython에서 나온 것입니다. 그래서 아마도 -lpython2.7을 추가하거나 사용할 파이썬 버전을 추가 할 수 있습니다.