के रूप में एक PHP एक्सटेंशन संकलित करना मैं विंडोज़ पर एक गैर थ्रेड-सुरक्षित वातावरण में उपयोग करने के लिए छविमैजिक (कल्पना) एक्सटेंशन को संकलित करने की कोशिश कर रहा हूं।गैर-थ्रेड-सुरक्षित
मैं PHP 5.3.10 का उपयोग कर रहा हूं और मेरे संकलन वातावरण के रूप में विजुअल सी ++ एक्सप्रेस सेट अप किया है। समस्या यह है कि मैं अपाचे 2.2 में एक एफसीजीआई मॉड्यूल के रूप में PHP के गैर-थ्रेड-सुरक्षित संस्करण का उपयोग कर रहा हूं।
इस प्रकार, मेरे PHP को php5.lib
के साथ आपूर्ति की जाती है और php5ts.lib
नहीं है। मेरा मानना है कि यही कारण है कि मैं इन त्रुटियों को मिल रहा है है:
imagick.obj : error LNK2019: unresolved external symbol __imp__tsrm_mutex_alloc referenced in function _zm_startup_imagick
मैं केवल कभी भी बनाया और लिनक्स पर बातें संकलित किया है, तो कैसे एक खिड़कियों पर्यावरण पर यह करने के लिए भी यकीन नहीं है।
मैं विस्तार को कैसे संकलित कर सकता हूं ताकि यह गैर-थ्रेड-सुरक्षित हो?
मैंने php5ts.lib की एक प्रति प्राप्त करने के लिए PHP 5.3.10 की थ्रेडसेफ बाइनरी डाउनलोड की। मैं तब विस्तार को संकलित करने में सक्षम था।
मैं अनुमान लगा रहा हूँ कि ZTS
पूर्वप्रक्रमक निर्देश स्थापित करने के लिए या तो 1
या 0
विस्तार या तो threadsafe या गैर threadsafe के रूप में संकलित करने के लिए कारण होगा। (इसके बारे में भी निश्चित नहीं है, इसलिए यदि कोई मुझे सही बताता है या नहीं, तो यह बहुत सराहना की जाएगी। :))
मैंने फिर विंडोज 7 चलाने वाली वर्चुअल मशीन स्थापित की और नवीनतम संस्करण स्थापित किया WAMP। इसका कारण यह है कि यह PHP के थ्रेडसेफ संस्करण का उपयोग करता था।
मैंने डीएल को PHP स्थापना में एक्सटी फ़ोल्डर में रखा और इसे php.ini
में सक्षम किया। हालांकि, WAMP में दोनों के नियम व एनटीएस संस्करण की कोशिश कर के बाद भी, मैं मिलेगा:
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.3.10/ext/imagick.dll' - The specified module could not be found.
in Unknown on line 0
लेकिन बात यह है कि c:/wamp/bin/php/php5.3.10/ext/imagick.dll'
मौजूद है है, और हाँ मैं इस बार का एक बहुत जाँच कर ली है।
मैंने फिर छविमैजिक को 6.6.2-10-Q16 तक घटा दिया, लेकिन फिर भी वही समस्या दिखाई दे रही है।
अपाचे 2.2 (सभी मैन्युअल रूप से स्थापित) पर PHP dev.10 के nts संस्करण को चलाने के लिए मेरी dev मशीन पर एक ही समस्या होती है।
ऐसा लगता है कि मैं ZTS
पूर्वप्रक्रमक के बारे में गलत हो सकता है। अगर मैं संकलित डीएल पर निर्भरता वॉकर का उपयोग करके ZTS=0
और संकलित करता हूं, तो यह दिखाता है कि इसे php5ts.dll
की आवश्यकता है जो केवल PHP के थ्रेडसेफ संस्करणों पर मौजूद है।
मैं निर्भरता वॉकर के साथ और अधिक फेरबदल किया और पाया कि मैं msvc100d.dll के लिए लिंक सांख्यिकीय करना पड़ा। मैंने प्रीप्रोसेसर परिभाषा में ZTS
हटा दिया और php5ts.dll
के बजाय php5.lib
का उपयोग करके संकलित करने में सक्षम था। मुझे लगता है कि यह मुझे एक गैर-टीएस डीएल मिलना चाहिए।
हालांकि, जब विस्तार लोड हो रहा है, मैं अभी भी हो रही है:
PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'imagick.dll' in Unknown on line 0
और त्रुटियों निर्भरता वॉकर से:
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
स्थापित दृश्य ग व्यक्त ++ 2008 और संकलित मंच टूलकिट V90 का उपयोग कर , लेकिन अभी भी एक ही मुद्दे का सामना करना पड़ रहा है।
कोई युक्ति की सराहना की :)
serverfault.com प्रश्न। – Raptor