5

के लिए काम नहीं कर रहा है मैं एडब्ल्यूएस लैम्ब्डा के लिए एक देशी नोड मॉड्यूल विकसित कर रहा हूं। इस नोड मॉड्यूल की आवश्यकता json-cस्थिर लिंकिंग नोड मॉड्यूल

AWS lambda guidelines के अनुसार नोड मॉड्यूल में गतिशील निर्भरता नहीं होनी चाहिए। तो जेसन-सी पुस्तकालय के स्थिर संस्करण को जोड़ने का प्रयास किया। लेकिन मुझे संकलन समय त्रुटियां मिल रही हैं।

एक नोड मॉड्यूल सिर्फ एक शेयर की गई लाइब्रेरी है, मैंने लिखा एक sample C application (मुख्य साथ नाम दिया) नोड मॉड्यूल संकलन अनुकरण करने के लिए और इन परिणामों हैं:

g++  -shared -pthread -rdynamic -m64 -Wl,-soname=addon.node -o addon.node testjson.cpp -I /usr/include/json-c/ -L /lib/x86_64-linux-gnu/ -l:libjson-c.a 
testjson.cpp: In function ‘int test()’: 
testjson.cpp:6:14: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
    char *str = "{ \"msg-type\": [ \"0xdeadbeef\", \"irc log\" ], \ 
      ^
/usr/bin/ld: /tmp/ccihB9d8.o: relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC 
/tmp/ccihB9d8.o: error adding symbols: Bad value 
collect2: error: ld returned 1 exit status 

और जब मैं के साथ की कोशिश की "- पूरे संग्रह ":

g++ -shared -o libshared.so -Wl,--whole-archive -fPIC -l:/usr/lib/x86_64-linux-gnu/libjson-c.a -Wl,--no-whole-archive testjson.cpp -I /usr/include/json-c/ 
testjson.cpp: In function ‘int test()’: 
testjson.cpp:6:14: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
    char *str = "{ \"msg-type\": [ \"0xdeadbeef\", \"irc log\" ], \ 
      ^
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libjson-c.a(json_c_version.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC 
/usr/lib/x86_64-linux-gnu/libjson-c.a(json_c_version.o): error adding symbols: Bad value 
collect2: error: ld returned 1 exit status 

क्या मैं गलत कर रहा हूँ यह स्थिर एक साझा ऑब्जेक्ट में एक पुस्तकालय लिंक करना संभव नहीं है?

+0

क्या आपने वेनिला अमेज़ॅन लिनक्स एएमआई पर अपना मॉड्यूल बनाने का प्रयास किया था? इससे आपको संकेत मिलता है कि लैम्ब्डा क्या चल रहा है। – kixorz

उत्तर

3

सबसे पहले आपको स्थिर पुस्तकालय के रूप में मैन्युअल रूप से जेसन-सी बनाने की आवश्यकता है।

-xvzf json-सी 0.11.tar.gz Json-सी स्टेटिक लिब

कॉन्फ़िगर करने के बाद अपने binding.gyp फ़ाइल को स्थापित (यह NPM पुस्तकालय के लिए स्रोत कोड के निर्माण नोड ढकोसला उपकरण का उपयोग कर के लिए लागू है) बनाते हैं।

{ 
    "targets": [ 
    { 
     "target_name": "testName", 
     "sources": ["yourCode.c"], 
     "libraries": ["/var/task/lib/libjson-c.a"] 
    } 
    ] 
} 

यह मेरे लिए काम कर रहा है।

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