हमारे पास dbookpy.c नामक एक सी फ़ाइल है, जो कुछ सी कार्यों को बाध्यकारी पाइथन प्रदान करेगी।एक पायथन साझा करना, जिसमें सेमेक के साथ बाध्यकारी साझा किया गया है, जो बाहरी पुस्तकालयों पर निर्भर करता है
अगला हम cmake साथ एक उचित .so बनाने का निर्णय लिया है, लेकिन यह हम बंधन में बाहरी पुस्तकालय 'libdbook' जोड़ने के लिए कुछ संबंध है के साथ गलत कर रहे हैं लगता है:
CMakeLists.txt इस प्रकार है:
PROJECT(dbookpy)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
INCLUDE_DIRECTORIES("/usr/local/include")
LINK_DIRECTORIES(/usr/local/lib)
OPTION(BUILD_SHARED_LIBS "turn OFF for .a libs" ON)
ADD_LIBRARY(dbookpy dbookpy)
SET_TARGET_PROPERTIES(dbookpy PROPERTIES IMPORTED_LINK_INTERFACE_LIBRARIES dbook)
SET_TARGET_PROPERTIES(dbookpy PROPERTIES LINKER_LANGUAGE C)
#SET_TARGET_PROPERTIES(dbookpy PROPERTIES LINK_INTERFACE_LIBRARIES dbook)
#SET_TARGET_PROPERTIES(dbookpy PROPERTIES ENABLE_EXPORTS ON)
#TARGET_LINK_LIBRARIES(dbookpy LINK_INTERFACE_LIBRARIES dbook)
SET_TARGET_PROPERTIES(dbookpy
PROPERTIES
SOVERSION 0.1
VERSION 0.1
)
फिर हम निर्माण:
x31% mkdir build
x31% cd build
x31% cmake ..
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Check size of void*
-- Check size of void* - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Configuring done
-- Generating done
-- Build files have been written to: /home/edd/dbook2/dbookpy/build
x31% make
Scanning dependencies of target dbookpy
[100%] Building C object CMakeFiles/dbookpy.dir/dbookpy.o
Linking C shared library libdbookpy.so
[100%] Built target dbookpy
अब तक तो अच्छा। पायथन में परीक्षण:
x31% python
Python 2.5.4 (r254:67916, Apr 24 2009, 15:28:40)
[GCC 3.3.5 (propolice)] on openbsd4
Type "help", "copyright", "credits" or "license" for more information.
>>> import libdbookpy
python:./libdbookpy.so: undefined symbol 'dbook_isbn_13_to_10'
python:./libdbookpy.so: undefined symbol 'dbook_isbn_10_to_13'
python:./libdbookpy.so: undefined symbol 'dbook_sanitize'
python:./libdbookpy.so: undefined symbol 'dbook_check_isbn'
python:./libdbookpy.so: undefined symbol 'dbook_get_isbn_details'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: Cannot load specified object
हमम। लिंकर त्रुटि। यह ऐसा लगता है libdbook लिंक नहीं है:
x31% ldd libdbookpy.so
libdbookpy.so:
Start End Type Open Ref GrpRef Name
05ae8000 25aec000 dlib 1 0 0 /home/edd/dbook2/dbookpy/build/libdbookpy.so.0.1
नहीं ऐसा नहीं है। libdbook करने के लिए एक उचित लिंकेज इस तरह दिखता है:
x31% ldd /usr/local/bin/dbook-test
/usr/local/bin/dbook-test:
Start End Type Open Ref GrpRef Name
1c000000 3c004000 exe 1 0 0 /usr/local/bin/dbook-test
08567000 28571000 rlib 0 2 0 /usr/lib/libm.so.5.0
09ef7000 29efb000 rlib 0 1 0 /usr/local/lib/libdbook.so.0.1
053a0000 253d8000 rlib 0 1 0 /usr/lib/libc.so.50.1
0c2bc000 0c2bc000 rtld 0 1 0 /usr/libexec/ld.so
किसी को भी किसी भी विचार क्यों यह काम नहीं कर रहा है?
बहुत धन्यवाद।
Edd
हाय आरक्यू, नीचे दिए गए उत्तर को देखें। धन्यवाद –