Je développe un module de noeud natif pour AWS lambda. Ce module de noeud est nécessaire json-cLa liaison statique ne fonctionne pas pour le module de noeud
Conformément au AWS lambda guidelines, le module de noeud ne doit pas avoir de dépendances dynamiques. Donc essayé de relier la version statique de la bibliothèque json-c. Mais je reçois des erreurs de compilation.
En tant que module de noeud est juste une bibliothèque partagée, j'ai écrit un sample C application (avec principal renommé) pour simuler la compilation du module de noeud et ce sont les résultats:
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
Et quand j'ai essayé avec « - archive complète ":
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
Qu'est-ce que je fais mal? Est-il impossible de lier statiquement une bibliothèque à un objet partagé?
Avez-vous essayé de construire votre module sur Amazon Linux AMI vanille? Cela peut vous donner des indices sur l'exécution de Lambda. – kixorz