OpenBSD amd64 crosscompile to i386

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

Szerkesztve: 2021. 04. 23., p – 22:18

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.)

Nem az a gond, hogy a C runtime-od nem 32 bites? Emiatt balhézik szerintem a linker.

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...

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.