Ich entwickle ein natives Knotenmodul für AWS Lambda. Dieses Knotenmodul benötigt json-cstatische Verknüpfung funktioniert nicht für Knotenmodul
Gemäß AWS lambda guidelines sollte das Knotenmodul keine dynamischen Abhängigkeiten haben. Also versucht, die statische Version der json-c-Bibliothek zu verknüpfen. Aber ich bekomme Kompilierzeitfehler.
Als Knotenmodul nur eine gemeinsam genutzte Bibliothek ist, schrieb ich ein sample C application (mit Haupt umbenannt), um den Knotenmodul Kompilation zu simulieren und diese sind die Ergebnisse:
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
Und wenn ich mit versucht „- ganzes Archiv ":
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
Was mache ich falsch? Ist es nicht möglich, eine Bibliothek statisch mit einem gemeinsamen Objekt zu verknüpfen?
Haben Sie versucht, Ihr Modul auf Vanille Amazon Linux AMI zu bauen? Dies kann Ihnen Hinweise geben, auf was Lambda läuft. – kixorz