Wir fangen errors in our CMake makefiles wegen Mangel an -fPIC
. Sie ist eine von einer CI20 MIPS Entwickler-Board:Erkennen Sie 32-Bit-x86-Prozessor in CMakeList.txt?
...
[ 92%] Built target cryptopp-object
Scanning dependencies of target cryptopp-shared
Scanning dependencies of target cryptopp-static
Linking CXX static library libcryptopp.a
Linking CXX shared library libcryptopp.so
/usr/bin/ld: CMakeFiles/cryptopp-object.dir/cryptlib.cpp.o: relocation R_MIPS_HI16 against
`a local symbol' can not be used when making a shared object; recompile with -fPIC
CMakeFiles/cryptopp-object.dir/cryptlib.cpp.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
Die Politik des Projektes ist für uns PIC überall, außer 32-Bit-x86 aufgrund Drücken registrieren. Das bedeutet x86_64, ARM-32, Aarch32, Aarch64, MIPS, MIPS64, UltraSparc usw. erhalten PIC.
Ich glaube, dass der Zielprozessor in CMAKE_SYSTEM_PROCESSOR
zur Verfügung gestellt wird. Das Problem, das ich habe, ist, dass die Docs mir die Werte nicht sagen, also kann ich nicht herausfinden, wie man einen "nicht 32-Bit x86" -Test erstellt.
Wie kann ich 32-Bit-x86-Prozessor in CMakeList.txt erkennen?
Noch besser, ich würde gerne eine umfassende Liste von Prozessoren sehen, die CMake CMAKE_SYSTEM_PROCESSOR
setzt. Wenn jemand die Liste hat, wäre es großartig, sie zur Verfügung zu stellen.
Danke nochmal Florian. Ich wusste nicht über 'CMAKE_POSITION_INDEPENDENT_CODE'. Ich werde es hinzufügen. – jww
* "... nimm alle kleinen Endian-Prozessoren als Intel-basierte" * - Das muss möglicherweise etwas gelockert werden. Alle ARM-Prozessoren, mit denen ich arbeite, sind LE. Der Eckfall könnte ein PowerPC sein, der in alten Apple G5 gefunden wurde. Sein BE, und es braucht -fPIC (IIRC). Ich habe einen dieser G5 in meinem Keller, um die BE-Builds der Bibliothek zu testen. Wenn [Verizon Portweiterleitung in ihren Routern repariert] (https://www.google.com/search?q=verizon+prt+forwarding+broke), kann ich Ihnen Remote-SSH-Zugriff gewähren, wenn Sie es wünschen. PF arbeitete früher, aber VZ brach es in den Firmware-Updates der 4XX-Serie. Du kannst CMake testen, wie du willst :) – jww
@jww Ja, ich hätte es besser wissen sollen. Das tut mir leid. Ich habe die viel präzisere "check for vordefinierte x86-Makros" Version hinzugefügt. Das sollte es tun. – Florian