Fórumok
Van egy program:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("kecske\n");
return 0;
}
Fordítom így:
cc -m32 kecske.c -o kecske
Kapom ezt:
ld: error: /tmp/kecske-4627f9.o is incompatible with /usr/bin/../lib/crt0.o
cc: error: linker command failed with exit code 1 (use -v to see invocation)
Próbálom így fordítani:
CFLAGS="-m32" LDFLAGS="-m32" cc -v -m32 kecske.c -o kecske
Eredmény:
OpenBSD clang version 10.0.1
Target: i386-unknown-openbsd6.8
Thread model: posix
InstalledDir: /usr/bin
"/usr/bin/cc" -cc1 -triple i386-unknown-openbsd6.8 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name kecske.c -mrelocation-model pic -pic-level 1 -pic-is-pie -mthread-model posix -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -masm-verbose -mconstructor-aliases -target-cpu i586 -dwarf-column-info -fno-split-dwarf-inlining -debugger-tuning=gdb -v -resource-dir /usr/lib/clang/10.0.1 -fdebug-compilation-dir /root -ferror-limit 19 -fmessage-length 0 -fwrapv -stack-protector 2 -fgnuc-version=4.2.1 -fobjc-runtime=gnustep -fdiagnostics-show-option -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -faddrsig -o /tmp/kecske-4627f9.o -x c kecske.c
clang -cc1 version 10.0.1 based upon LLVM 10.0.1 default target amd64-unknown-openbsd6.8
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/clang/10.0.1/include
/usr/include
End of search list.
"/usr/bin/ld" -e __start --eh-frame-hdr -Bdynamic -dynamic-linker /usr/libexec/ld.so -o kecske /usr/bin/../lib/crt0.o /usr/bin/../lib/crtbegin.o -L/usr/bin/../lib -L/usr/lib /tmp/kecske-4627f9.o -lcompiler_rt -lc -lcompiler_rt /usr/bin/../lib/crtend.o
ld: error: /tmp/kecske-4627f9.o is incompatible with /usr/bin/../lib/crt0.o
cc: error: linker command failed with exit code 1 (use -v to see invocation)
Kerestem, hogy miként is kéne ezt művelni, de nem találtam semmit. Ha valakinek van valami ötlete, hogy mit is kellene feltelepíteni, bekonfigurálni, parancsba adni, azt megköszönöm.
Hozzászólások
Visszakérdezek: mit ír ki a clang --print-supported-cpus opciója?
A jelzett -m32 nem gcc parancssori kapcsoló?
(Esetleg -march=i486 ?)
"Share what you know. Learn what you don't."
http://oscomp.hu/depot/openbsd-clang-cpus.txt
Nem, a CLang is ismeri, látod át is kapcsolt i586-ra.
(Ugyanaz az eredmény: az object file-lal ütközik. Ha meg
-m32
nélkül használom, akkor nem is működik: feldobja a 64-bites x86-osok listáját, hogy abból leszek szíves.)Oldschool Computer - http://oscomp.hu
Nem az a gond, hogy a C runtime-od nem 32 bites? Emiatt balhézik szerintem a linker.
Dehogynem - szerepel is a hibaüzenetben - pont ez a kérdés, hogy ezzel mit kéne csinálni; hogy lehet OpenBSD-re felrakni a 32-bites libeket, vagy ha alapból fent vannak, akkor miért nem látja, stb.
Oldschool Computer - http://oscomp.hu
biztos van olyan megoldas is amit varsz, de ha ezt nincs ido kivarni en kiprobalnam hogy virtualis gepben futtatnek egy 32 bites openbsd-t
neked aztan fura humorod van...
Van idő. Ha nem lesz megoldás, vagy valami olyan cross-compile környezetet kéne összerakni, amit több idő összereszelni, mint egy új VM, akkor az utóbbi lesz.
Oldschool Computer - http://oscomp.hu
Kipróbáltam 32 bites OBSD-n (6.8 -as OBSD verzió, virtuális gépben), és nekem rendben lefordította a forrást a jelzett kapcsolóval, és futtatható is az eredmény.
"Share what you know. Learn what you don't."
32-bites OpenBSD-n nyilván kompatibilis lesz a 32-bites bináris a 32-bites runtime-mal; az a kérdés, hogy 64-bites rendszeren hogy tudok 32-biteset forgatni, pl. 32-bites runtime feltelepítésével (hogyan), vagy ha az fent van, akkor miért nem látja, stb.
Oldschool Computer - http://oscomp.hu