2012-04-09 17 views
7

इसलिए मैं libgstreamermm-0.10 के उदाहरणों को संकलित कर रहा हूं, और मैंने सीएमके के साथ एक समस्या में भाग लिया है।सीएमके पीकेजी-कॉन्फ़िगर लाइब्रेरी लिंक पथ

libgstreamermm-0.10 के संस्करण के साथ जो मेरे सिस्टम पर डिफ़ॉल्ट रूप से स्थापित है, उदाहरण segfaults। ठीक है, इसलिए मुझे नवीनतम स्रोत मिल गए और उन्हें/usr/local में इंस्टॉल किया गया और नया उदाहरण प्राप्त हुआ। सबकुछ अच्छा दिख रहा है।

g++ main.cc player_window.cc -o test `pkg-config --cflags --libs gtkmm-3.0` `pkg-config --cflags --libs gstreamermm-0.10` 

ठीक काम करता है और अपेक्षित है। महान, अब कोशिश करने और इसे सीएमके के साथ अच्छी तरह से खेलने के लिए मिलता है। मैं एक त्वरित CMakeLists.txt फ़ाइल बनाते हैं। मैं pkg-config का उपयोग करता हूं, क्योंकि यह ठीक काम करता है और मैं वास्तव में एक खोज मॉड्यूल जोड़ना नहीं चाहता हूं। तो मेरी फ़ाइल इस तरह दिखता है:

cmake_minimum_required(VERSION 2.6.2) 
project(media_player_gtkmm) 

INCLUDE(FindPkgConfig) 

set(SOURCES main.cc player_window.cc) 

add_executable(media_player_gtkmm ${SOURCES}) 

#dependencies 
pkg_check_modules(GSTMM REQUIRED gstreamermm-0.10) 
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0) 
include_directories(${GTKMM_INCLUDE_DIRS} ${GSTMM_INCLUDE_DIRS}) 
link_directories(${GTKMM_LIBRARY_DIRS} ${GSTMM_LIBRARY_DIRS}) 
target_link_libraries(media_player_gtkmm ${GTKMM_LIBRARIES} ${GSTMM_LIBRARIES}) 

सब कुछ लिंक मंच है, जहां मैं अपरिभाषित प्रतीक त्रुटियों मिलता जब तक संकलित करता है। मैं फिर pkg-config --libs gstreamermm-0.10 के आउटपुट को -एल/​​usr/local/lib के साथ शुरू करता हूं। मैं make VERBOSE=1 के आउटपुट को देखता हूं और सीएमके लिंक कमांड में -L जोड़ नहीं रहा है, भले ही मेरे पास link_directories लाइन है। तो भले ही मैं/usr/local/में gstreamer के नए संस्करण के लिए हेडर का उपयोग कर रहा हूं, इसके बजाय/usr/lib से लाइब्रेरी का उपयोग किया जा रहा है, जब मैं संस्करण/usr/local/lib में उपयोग करना चाहता हूं । Pkg-Config इस पर लेने के लिए प्रतीत होता है, और तदनुसार समायोजित करता है, लेकिन सीएमकेक, भले ही मैं इसे आंतरिक रूप से pkg-config का उपयोग कर रहा हूं, लिंक झंडे पर नहीं उठाता है।

मैं मैन्युअल रूप से लिंक झंडे मैन्युअल रूप से सेट कर सकता हूं, लेकिन यह एक हैक की तरह लगता है। मुझे यकीन है कि इसे निर्दिष्ट करने का एक बेहतर तरीका है।

उत्तर

8

link_directories केवल AFTER it पर आने वाले लक्ष्यों को प्रभावित करता है। इसलिए, कॉल के बाद add_executable को स्थानांतरित करने के लिए आपको की आवश्यकता है।

+0

मेरे पास है। मैं link_directories() निर्देश का उपयोग कर रहा हूं, इसलिए इसे -एल जोड़ना चाहिए? मुझे लगता है कि मैं गलत समझ रहा हूं कि link_directories() क्या करता है। मैं एलडीएफएलजीएस वैरिएबल का उपयोग कर सकता हूं, लेकिन मुझे यकीन नहीं है कि यह कैसे करें और सीएमकेक के अपने लिंकर झंडे को नहीं दबाएं। –

+0

सही, नया उत्तर आ रहा है ... – Anonymous

+0

उसने ऐसा किया, धन्यवाद! –

संबंधित मुद्दे