$ g++ -Wl,--save-temps -g -shared -m64 -o libB.so -fPIC -DPIC libB.cpp
ld: unrecognized option '--save-temps'
Lett egy ilyen:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118803
- NevemTeve blogja
- A hozzászóláshoz be kell jelentkezni
- 446 megtekintés
Hozzászólások
Nem az az elvárt, hogy a -Wl,-el eljusson az ld-ig az opció?
- A hozzászóláshoz be kell jelentkezni
Igen, de mivel a collect2 beékelődik a gcc és a ld közé, kellene legyen egy mód arra, hogy eljusson az opció a collect2-höz, de ne passzolja tovább a ld-nek.
Tkp. arról van szó, hogy a collect2 messze nem triviális dolgot csinál, amit jó lenne debuggolni.
- A hozzászóláshoz be kell jelentkezni
A --save-temps elírás? A man szerint -save-temps, egy '-'.
- A hozzászóláshoz be kell jelentkezni
A `gcc`-nek is van egy ilyen opciója, amit elfogad -save-temps vagy --save-temps formában. A `collect2` csak a --save-temps formát ismeri, azt viszont tovább is adja a `ld`-nek.
$ g++ -save-temps -g -shared -m64 -o libB.so -fPIC -DPIC libB.cpp
$ g++ --save-temps -g -shared -m64 -o libB.so -fPIC -DPIC libB.cpp
$ g++ -Wl,-save-temps -g -shared -m64 -o libB.so -fPIC -DPIC libB.cpp
/usr/local/x86_64-pc-linux-gnu/bin/ld: Error: unable to disambiguate: -save-temps (did you mean --save-temps ?)
collect2: error: ld returned 1 exit status
$ g++ -Wl,--save-temps -g -shared -m64 -o libB.so -fPIC -DPIC libB.cpp
/usr/local/x86_64-pc-linux-gnu/bin/ld: unrecognized option '--save-temps'
- A hozzászóláshoz be kell jelentkezni
Azta, ezt jól átgondolták...
- A hozzászóláshoz be kell jelentkezni
No, találtam egy COLLECT_GCC_OPTION
nevű enviro-t, ha abba betesszük, hogy -save-temps
vagy --save-temps
, akkor... szintén nem történik semmi változás.
$ grep 'cdtor' strace.log
[pid 49481] open("/tmp/ccb38lZo.cdtor.c", O_RDWR|O_CREAT|O_EXCL, 0600) = 3
[pid 49481] lstat("/tmp/ccb38lZo.cdtor.c", {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
[pid 49481] unlink("/tmp/ccb38lZo.cdtor.c") = 0
- A hozzászóláshoz be kell jelentkezni
Említsük meg, hogy a collect2 létre sem jött volna, ha nincs a GYBAJUNK C++. Köszönjük, Strupstrup úr.
- A hozzászóláshoz be kell jelentkezni
Én azt nem értem, hogy egy natúr C kód fordításához miért akar C++ eszközöket igénybe venni? Hát arra ott a G++, nem?
Szerk, hülye vagyok, ez egy C++ kód. Felületesen olvastam el.
Nem tudod valahogy kézzel végigzongorázni, amit a g++ csinál?
Szerk2: elolvastam a Bugzillára adott válaszokat. Az az ember ezeket képes volt tényleg beírni, és nem röhögte el magát/csapott a fejére, hogy ez így szar működés? Mármint, akkor nem generálok temp fájlokat, ha az a kapcsolóm, hogy generáljak?! Hol logikus ez???!!!
- A hozzászóláshoz be kell jelentkezni
Én érteni vélem. Valszleg a save-temps itt nem abban az értelemben szerepel hogy mentsd el a temp fileokat, hanem hogy sporold meg a temp fileokat. De nagyon messziről ugatom csak...
- A hozzászóláshoz be kell jelentkezni
Meggyónták (a hibabejelentésre válaszul), hogy ELF-platformon csak egy üres fájl készül, és az is csak akkor, ha nem használjuk a save-temps opciót (amit a gcc-nek megadni, tehát -Wl prefix nélkül). Magamtól is kitalálhattam volna, elnézést kérek.
Bár van a válaszban egy olyan rész, hogy "hát igen, az üres fájl felesleges létrehozását ki lehetne hagyni"
Így utólag bevallhatom, hogy ezt a problémát akartam volna vizsgálni:
https://stackoverflow.com/questions/79411453/issue-in-static-variables-…
Nyilván amit akar, az fasság; nyilván reentráns kódot kellene alkotnia tákolás helyett; valamint mindenki tudja, hogy a C++ nem működik jól együtt a $X-szel (esetünkben a X=dinamikus betöltés); de ettől még lehetne vizsgálni, hogy a gcc és a clang miért ad különböző eredményt. (Valamint említsük meg, hogy Aix-on a gcc más eredményt ad, mint Linuxon.)
- A hozzászóláshoz be kell jelentkezni