का उपयोग करके एक स्थिर लाइब्रेरी नहीं मिल रही है, मैं Allegro लाइब्रेरी के साथ खेलना चाहता हूं, लेकिन मुझे लगता है कि मेरी टेस्ट प्रोजेक्ट ठीक से लिंक नहीं हो रहा है। सटीक होने के लिए, मुझे cannot find -l<...>
त्रुटियां मिल रही हैं, जहां <...>
एक फ़ाइल है जिसे मैंने target_link_libraries
का उपयोग करके निर्दिष्ट किया है। (विवरण के लिए नीचे देखें।)सीएमके को सापेक्ष फ़ाइल पथ
रिकॉर्ड के लिए, मैं सभी कि निर्माण प्रक्रिया के बारे में जानकार नहीं हूँ, और यह करने के लिए अपने सामान्य दृष्टिकोण एक बटन "पर क्लिक करें जाता है और आशा है कि एक निष्पादन पॉप अप होता है, अगर नहीं, करने के लिए सहारा परीक्षण त्रुटि विधि।" मुझे यहां बहुत सारे प्रश्न मिल गए हैं, लेकिन ऐसा लगता है कि या तो समस्याएं या समाधान जो मैं अनुभव कर रहा हूं उससे अलग हैं। मैं एक निश्चित "उम्मीद कर रहा हूं कि आप गलत क्या कर रहे हैं, और यहां इसके बजाय क्या करना है"।
कहा, यह मेरा परियोजना संरचना है:
/include
/lib
/src
main.cpp
CMakeLists.txt
को शामिल और lib निर्देशिका मैं Allegro binary package से नकल, और lib है जहां सभी .a फ़ाइलों रहते हैं।
यहाँ क्या मेरी CMakeLists.txt कहते है:
cmake_minimum_required(VERSION 3.2)
project(AllegroTest)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -static-libgcc -static-libstdc++ -fpermissive")
add_definitions(-DALLEGRO_STATICLINK)
file(GLOB SOURCES src/*.cpp)
set(SOURCE_FILES ${SOURCES})
add_executable(AllegroTest ${SOURCE_FILES})
include_directories(include)
target_link_libraries(AllegroTest
liballegro-5.0.10-static-mt.a
liballegro_acodec-5.0.10-static-mt.a
liballegro_audio-5.0.10-static-mt.a
libvorbisfile-1.3.2-static-mt.a
libvorbis-1.3.2-static-mt.a
liballegro_color-5.0.10-static-mt.a
liballegro_dialog-5.0.10-static-mt.a
liballegro_font-5.0.10-static-mt.a
liballegro_image-5.0.10-static-mt.a
liballegro_memfile-5.0.10-static-mt.a
liballegro_physfs-5.0.10-static-mt.a
liballegro_primitives-5.0.10-static-mt.a
liballegro_ttf-5.0.10-static-mt.a
libdumb-0.9.3-static-mt.a
libFLAC-1.2.1-static-mt.a
libfreetype-2.4.8-static-mt.a
libogg-1.2.1-static-mt.a
libzlib-1.2.5-static-mt.a
libopenal-1.14-static-mt.a
)
target_link_libraries(AllegroTest
libgdiplus.a
libuuid.a
libkernel32.a
libwinmm.a
libpsapi.a
libopengl32.a
libglu32.a
libuser32.a
libcomdlg32.a
libgdi32.a
libshell32.a
libole32.a
libadvapi32.a
libws2_32.a
libshlwapi.a
)
और इन त्रुटियों को मैं हो रही हैं:
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lallegro-5.0.10-static-mt
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lallegro_acodec-5.0.10-static-mt
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lallegro_audio-5.0.10-static-mt
<etc.>
मैं हर तरह कल्पनीय — के संयोजन सहित पथ निर्दिष्ट की कोशिश की है यह link_directories(lib)
— के उपयोग के साथ लेकिन कुछ भी प्रभाव नहीं पड़ता है।
एकमात्र चीज जो काम पूर्ण पथ (C:/Users/<...>/lib/liballegro-5.0.10-static-mt.a
) निर्दिष्ट कर रहा है, लेकिन यह मेरे लिए होता है कि यह आदर्श तरीके से बहुत दूर है।
मैं यहां क्या गलती कर रहा हूं, और इसे ठीक करने का अनुशंसित तरीका क्या है?
मुझे लगता है कि पूर्ण पथ के साथ परियोजना अब आत्मनिर्भर नहीं होगी और इसके बजाय इसके पर्यावरण पर भरोसा करेगी। मुझे लगता है कि 'CMAKE_CURRENT_SOURCE_DIR' उसके आस-पास एक तरीका है, इसलिए इसका उल्लेख करने के लिए धन्यवाद। वास्तव में वास्तव में सापेक्ष पथों के साथ काम करने का कोई तरीका नहीं है, यद्यपि? ऐसा लगता है जैसे होना चाहिए। – vvye
मुझे ईमानदार होने के लिए 'link_directories (lib)' को ठीक करने की उम्मीद होगी, लेकिन 'link_directories' का उपयोग निराश हो गया है - यहां तक कि अपने [अपने दस्तावेज़ों में) (http://www.cmake.org/cmake/help /v3.2/command/link_directories.html)। 'CMAKE_SOURCE_DIR' और' CMAKE_CURRENT_SOURCE_DIR' के उदाहरण ढूंढना बहुत आम है - मुझे लगता है कि यह वास्तव में अच्छा अभ्यास है। यह आपको उन आदेशों के लिए दस्तावेज़ों की जांच करने के लिए सहेजता है जहां आप सुनिश्चित नहीं हैं कि वे स्रोत रूट या बिल्ड रूट के सापेक्ष पथ का इलाज करते हैं। – Fraser
कम से कम अब मैं आपकी अनिच्छा को समझता हूं यदि आपको लगता है कि आपको अपनी मशीन से पूर्ण पथ को हार्ड-कोड करना होगा - वास्तव में सभी लागतों से बचा जाना चाहिए :) – Fraser