2013-05-15 9 views
5

मैं GDAL-1.10.0 (http://trac.osgeo.org/gdal/wiki/DownloadSource) का निर्माण करने के mingw64 का उपयोग कर कोशिश कर रहा था ( http://sourceforge.net/projects/mingwbuilds/files/host-windows/ से x64-4.8.0 रिलीज-POSIX-seh-rev2.7z)। मैंने बिना किसी समस्या के मानक मिनजीडब्ल्यू (32-बिट) संस्करण के तहत gdal-1.10.0 संकलित किया है।लिंक त्रुटि (MinGW-बनाता है)

कारण मैं mingw64 करने के लिए स्विच करने के लिए है कि मानक 32-बिट MinGW वितरण अच्छी तरह से रूप std::thread तरह C++ 11 सुविधाओं का समर्थन नहीं करता है और (मुझे लगता है) अन्य सुविधाओं है। लेकिन मैं अंत में एक लिंक करने में त्रुटि मेरे बारे में

undefined reference to '__imp_GetACP' 

कुछ कह (या एक अलग सजाया नाम अगर मैं से mingw64/MinGW-बनाता है 32-बिट संस्करण का उपयोग करें) मिलता है। बीटीडब्ल्यू, मैंने 64-बिट, 32-बिट, सेह, एसजेएलजे सहित mingw64 के विभिन्न संस्करणों की कोशिश की, लेकिन सभी ने GetACP() के बारे में एक ही त्रुटि दी।

मैं कुछ होमवर्क किया था और इसी तरह की एक संकलन कार्य के लिए कुछ निर्देश मिला: http://www.gaia-gis.it/spatialite-3.0.0-BETA/mingw64_how_to.html#env ऊपर की वेबसाइट के अनुसार, ऐसा लगता है वे बताते हैं कि समस्या WOW64 और खिड़कियों dll फ़ाइलों का सही संस्करण के साथ करने के लिए नहीं किया जा सकता है उपयोग किया जाता है क्योंकि विंडोज़ 32-बिट या 64-बिट एप्लिकेशन कॉल करने के आधार पर स्वचालित रूप से आपके लिए यह निर्धारित करता है। यह माना जाता है कि mingw64 के लिए एक समस्या है क्योंकि संकलक जीसीसी 64-बिट है लेकिन msys निराशाजनक 32-बिट है।

लेकिन बाद से मैं 32-बिट संस्करण के रूप में अच्छी तरह से करने की कोशिश की, इसके बाद के संस्करण त्रुटि को समझाने के लिए प्रतीत नहीं होता। इससे भी अधिक, मैं, GetACP() के लिए सभी कॉल बाहर टिप्पणी करने के लिए एक गंदा तरह से करने की कोशिश की क्योंकि मैं वास्तव में कोड पृष्ठों और मेरी प्रयोजनों के लिए है कि सभी के बारे में परवाह नहीं है। अजीब पर्याप्त, संकलन ठीक है (बस बाहर टिप्पणी की GetACP() के साथ एक ताजा स्रोत पर), लेकिन एक ही लिंक त्रुटि अभी भी सूचना है। मैं जाँच की है कि libkernel32.a, libiconv.alib फ़ोल्डर में हैं, और यह भी c:\windows\system32 से dll के बाहर नकल और उन्हें उचित नाम के साथ MinGW सबफ़ोल्डर में रखने के लिए ऊपर ब्लॉग में निर्देशों का पालन किया। लिंक त्रुटि बनी हुई है। यह वह जगह है जहां मैंने सफलता के बिना लगभग दो दिन खर्च करने के बाद हैकिंग बंद कर दी। मैं समझ नहीं पा रहा हूं कि पूरे स्रोत-कोड में फ़ंक्शन में एक कॉल क्यों नहीं है और मुझे अभी भी लिंक त्रुटि मिल रही है।

क्या कोई यह बता सकता है कि इस समस्या को gdal और mingw64, और इसे ठीक करने के तरीके के कारण क्या हो सकता है?

इसके अलावा, mingw64 बारे में एक सामान्य सवाल है कि है वास्तव में POSIX कार्य का समर्थन करने में सक्षम है यह? मैं इस तरह के x64-4.8.0 रिलीज-POSIX-seh-rev2.7z के रूप में पैकेज के नाम देखते हैं, लेकिन मुझे याद है कि MinGW लोगों ने कहा वे पूर्ण POSIX समर्थन कभी नहीं होगा।

पीएस मैं इसे विंडोज सर्वर 2008 आर 2, 64-बिट पर परीक्षण कर रहा हूं।


अद्यतन: (MinGW-बनाता है) MinGW64 के तहत में GDAL- 1.10.0 के निर्माण के लिए पूरा कदम हैं:

$./configure 

फिर, संपादित GDALmake।ऑप्ट करें, GDAL_ROOT खोजें और डॉस/मिंगव प्रारूप के साथ सिग्विन ड्राइव प्रारूप को प्रतिस्थापित करें, उदा। बदलें:

GDAL_ROOT = /d/temp/build/gdal-1.10.0 

GDAL_ROOT = d:/temp/build/gdal-1.10.0 

को बदलें

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) 

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv 

अंत में, साथ

+०१२३५१६४१०६१
$ make && make install && cp apps/*.exe /usr/local/bin/ 

उत्तर

4

मुझे गलती से एक ही समस्या का सामना करना पड़ा है। हो सकता है कि यह एक MinGW बग या बुरा विन्यास फाइल है, लेकिन समाधान, उदाहरण के लिए,

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) 

CONFIG_LIBS = $(GDAL_ROOT)/$(LIBGDAL) -liconv 

में साथ बदलें लिंकर झंडे के अंत तक -liconv जोड़ने के लिए है GDALmake.opt फ़ाइल (फ़ाइलों में GetACP के लिए Mingw निर्देशिका खोजकर पाई गई)।

+0

यह उत्कृष्ट है। X64-4.8.1-release-posix-seh-rev0 (mingw-builds) का उपयोग करके परीक्षण किया गया। नोट: ऐसा लगता है कि GDALmake.opt में पहले से ही एक -liconv था। लेकिन, किसी भी तरह यह MinGW64 (प्रति mingw-builds) के तहत नहीं उठाया गया था। – tinlyx

+0

तो, यह बग क्यों होता है? –

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