मैं अपने गेम के लिए boost.python जोड़ रहा हूं। मैं स्क्रिप्ट में उनका उपयोग करने के लिए अपने वर्गों के लिए रैपर लिखता हूं। समस्या उस लाइब्रेरी को मेरे ऐप से जोड़ रही है। मैं cmake
बिल्ड सिस्टम का उपयोग कर रहा हूं।बूस्ट पायथन लिंकिंग
अब मैं एक सरल इसके लिए 1 फ़ाइल और makefile साथ अनुप्रयोग है:
PYTHON = /usr/include/python2.7
BOOST_INC = /usr/include
BOOST_LIB = /usr/lib
TARGET = main
$(TARGET).so: $(TARGET).o
g++ -shared -Wl,--export-dynamic \
$(TARGET).o -L$(BOOST_LIB) -lboost_python \
-L/usr/lib/python2.7/config -lpython2.7 \
-o $(TARGET).so
$(TARGET).o: $(TARGET).cpp
g++ -I$(PYTHON) -I$(BOOST_INC) -c -fPIC $(TARGET).cpp
और यह काम करता है। यह मेरे लिए एक 'इतनी' फाइल बनाता है जिसे मैं अजगर से आयात कर सकता हूं।
अब सवाल: सेमीकेक के लिए इसे कैसे प्राप्त करें?
मैं मुख्य CMakeList.txt
में लिखा है:
...
find_package(Boost COMPONENTS filesystem system date_time python REQUIRED)
message("Include dirs of boost: " ${Boost_INCLUDE_DIRS})
message("Libs of boost: " ${Boost_LIBRARIES})
include_directories(
${Boost_INCLUDE_DIRS}
...
)
target_link_libraries(Themisto
${Boost_LIBRARIES}
...
)
...
message
कॉल दिखाने:
Include dirs of boost: /usr/include
Libs of boost: /usr/lib/libboost_filesystem-mt.a/usr/lib/libboost_system-mt.a/usr/lib/libboost_date_time-mt.a/usr/lib/libboost_python-mt.a
ठीक है, इसलिए मैं अपने प्रोजेक्ट के लिए सरल सीपीपी फ़ाइल जोड़ दिया है साथ <boost/python.hpp>
के शामिल हैं। मुझे संकलन में त्रुटि मिलती है:
/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory
इसलिए इसमें सभी आवश्यकताएं शामिल नहीं हैं निर्देशिकाएं शामिल हैं।
और दूसरा प्रश्न:
कैसे पटकथा cpp फ़ाइलें के 2-चरणीय इमारत व्यवस्थित करने के लिए? मेकफ़ाइल में मैंने दिखाया कि TARGET.o और TARGET.so, सेमेक में 2 आदेशों को कैसे संसाधित किया जाए?
जैसा कि मैं समझता हूं, सबसे अच्छा तरीका सबप्रोजेक्ट बनाना और वहां कुछ करना है।
धन्यवाद।
के लिए उपयोग की जाने वाली वही find_package रणनीति का उपयोग करें यदि मेरी परियोजना को क्रॉसप्लेटफ़ॉर्म होना चाहिए तो क्या करें? वह लाइन खिड़कियों पर काम नहीं करेगी। – Ockonal
सच है, मैंने क्रॉस प्लेटफ़ॉर्म होने के लिए अपना उत्तर अपडेट कर दिया है। – Rod
ठीक है, मैं समझता हूँ। धन्यवाद। – Ockonal