2011-04-17 35 views
9

लिंक करते समय केवल एक स्थिर lib के लिए लिंक झंडे निर्दिष्ट करते हुए मेरे पास कई ऑब्जेक्ट फ़ाइलों से बनाया गया निष्पादन योग्य है और कई स्थिर और साझा पुस्तकालयों से जुड़ा हुआ है। मैं लिंक्ड पुस्तकालयों में से एक के लिए -Wl, -whole-archive linker विकल्प निर्दिष्ट करना चाहता हूं।निष्पादन योग्य

उदाहरण के लिए, इस आदेश से:

/usr/bin/c++ _objectFiles_ -o _myExec_ _someCommonOptions_ _myLibraries_ -Wl,-rpath _path to libs_ 

मैं इस आदेश को प्राप्त करना चाहते हैं:

/usr/bin/c++ _objectFiles_ -o _myExec_ _someCommonOptions_ _allOtherLibs_ \ 
    -Wl,-whole-archive _one particular lib_ -Wl,-no_whole-archive -Wl,-rpath _path to libs_ 

यह किसी भी तरह मैं इस cmake का उपयोग कर प्राप्त कर सकते हैं है? मैं समझता हूँ के रूप में जब मैं की तरह

set_target_properties(myExec PROPERTIES LINK_FLAGS "-Wl,-whole-archive") 

तो -whole-archive विकल्प सभी जुड़े पुस्तकालयों के लिए सेट कर दिया जाता कुछ जोड़ सकते हैं और यह निश्चित रूप से नहीं है कि मैं क्या चाहता हूँ।

धन्यवाद।

उत्तर

27

यह धागा Linking static libraries into shared libs? इसके लिए एक तरीका है।

SET (MYLIB -Wl,--whole-archive my_particular_lib -Wl,--no-whole-archive) 
.... 
TARGET_LINK_LIBRARIES(yourtarget ${normalstuff} ${MYLIB} ${othernormalstuff}) 

CMake docs राज्य:

लाइब्रेरी का नाम की परियोजना एक निर्भरता स्वचालित रूप से सुनिश्चित करें कि पुस्तकालय बनाने के लिए निर्माण प्रणाली में जोड़ दिया जाएगा में एक और लक्ष्य जोड़ा जा रहा है कि मेल खाता है लक्ष्य लिंक से पहले अद्यतित है। आइटम नाम '-' से शुरू होता है, लेकिन '-l' या '-फ्रेमवर्क' नहीं, को लिंकर झंडे के रूप में माना जाता है।

तो -Wl विकल्पों को सीएमके द्वारा हस्तक्षेप/स्पर्श नहीं किया जाना चाहिए।

+0

यह मदद करता है! धन्यवाद! – beduin

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