मेरे पास निम्न कोड है:
project(test)
cmake_minimum_required(VERSION 3.17)
set(PNG_DIR C:/Users/Kagami/.emscripten_cache/wasm/ports-builds/libpng)
find_library(PNG_STATIC_LIBRARY
NAMES libpng.a
HINTS ${PNG_DIR}
)
message(${PNG_DIR})
message(${PNG_STATIC_LIBRARY})
मेरे पास उस PNG_DIR
निर्देशिका में libpng.a
नाम की एक फ़ाइल है लेकिन find_library
अभी भी -NOTFOUND
लौटाती है। संभावित कारण क्या होंगे?
2 जवाब
find_library
को एक पुस्तकालय मिलेगा जिसका उपयोग आपके द्वारा उपयोग किए जाने वाले आर्च के साथ किया जा सकता है। तो आपके विंडोज़ पर यह .a
के लिए नहीं बल्कि .lib
के लिए दिखेगा।
लेकिन find_path
केवल एक फ़ाइल खोजें, इससे कोई फ़र्क नहीं पड़ता कि यह एक वास्तविक पुस्तकालय है या नहीं।
दस्तावेज़ीकरण से:
NAMES विकल्प को दिए गए प्रत्येक लाइब्रेरी नाम को पहले लाइब्रेरी फ़ाइल नाम के रूप में माना जाता है और फिर प्लेटफ़ॉर्म-विशिष्ट उपसर्गों (उदा. lib) और प्रत्यय (उदा. .so) के साथ माना जाता है। इसलिए कोई पुस्तकालय फ़ाइल नाम निर्दिष्ट कर सकता है जैसे कि libfoo.a सीधे। इसका उपयोग यूनिक्स जैसी प्रणालियों पर स्थिर पुस्तकालयों का पता लगाने के लिए किया जा सकता है।
find_library
का NAMES पैरामीटर लाइब्रेरी का नाम बताता है, फ़ाइल का नाम नहीं।
तो आपके मामले में सही आदेश होगा
find_library(PNG_STATIC_LIBRARY
NAMES png
HINTS ${PNG_DIR}
)
ध्यान दें कि आप NAMES को तर्क के रूप में एक से अधिक नाम दे सकते हैं, यदि पुस्तकालय अलग-अलग प्लेटफार्मों पर अलग-अलग नामों के तहत आता है।
यहां एक अतिरिक्त जटिलता इस तथ्य से आती है कि विंडोज़ पर हमारे पास दो असंगत टूलचेन, मिनजीडब्ल्यू और एमएसवीसी हैं। यदि आपकी लाइब्रेरी में एक .a
फ़ाइल समाप्त हो रही है, तो यह लगभग निश्चित रूप से MinGW टूलचेन के लिए संकलित की गई थी, इसलिए आप इसे विजुअल स्टूडियो बिल्ड से उपयोग नहीं कर पाएंगे। यहां आपको सबसे पहले लाइब्रेरी को सही टूलचेन के साथ फिर से कंपाइल करना होगा।
NAMES
विकल्प को दिए गए प्रत्येक लाइब्रेरी नाम को पहले लाइब्रेरी फ़ाइल नाम के रूप में माना जाता है और फिर प्लेटफ़ॉर्म-विशिष्ट उपसर्गों (जैसे lib
) और प्रत्ययों के साथ माना जाता है। (उदाहरण के लिए .so
)। इसलिए कोई पुस्तकालय फ़ाइल नाम निर्दिष्ट कर सकता है जैसे libfoo.a
सीधे।"
संबंधित सवाल
नए सवाल
cmake
CMake एक क्रॉस-प्लेटफॉर्म, ओपन-सोर्स बिल्ड सिस्टम जनरेटर है। यह कई एकीकृत विकास परिवेशों के लिए देशी मेकफाइल्स, निंजा-बिल्ड और प्रोजेक्ट फ़ाइलों की तरह बिल्ड सिस्टम के लिए फाइलें उत्पन्न करता है।
find_path
काम करता है, पता नहीं क्योंfind_library
।