MIPS 아키텍처(빅엔디안)용으로 Ncat을 크로스 컴파일하려고 했는데 SSL 지원이 꼭 필요해서 먼저 OpenSSL을 컴파일해야 합니다. 내 툴체인 바이너리의 이름은 'mips-gcc mips-ld...etc'와 같기 때문에 Github에서 최신 버전을 다운로드하고 다음과 같이 구성했습니다.
export PATH=$PATH:/path/to/toolchain
./Configure linux-mips32 --cross-compile-prefix=mips-
makefile은 크로스 툴체인을 사용하여 구성됩니다. 예를 들면 다음과 같습니다.
CC=mips-gcc
LD=mips-ld
AR=mips-ar
RANLIB=mips-ranlib
그래서 나는 달렸다make
처음 실행하면 다음과 같은 오류가 발생합니다.
../libcrypto.a(async_posix.o): In function `async_global_init':
async_posix.c:(.text+0x278): undefined reference to `pthread_key_create'
async_posix.c:(.text+0x2a4): undefined reference to `pthread_key_create'
make[2]: *** [link_app.] Error 1
make[2]: Leaving directory `/home/anon/Source/openssl/apps'
make[1]: *** [openssl] Error 2
make[1]: Leaving directory `/home/anon/Source/openssl/apps'
make: *** [build_apps] Error 1
-lpthread
CFLAGS에 옵션을 추가하는 방법에 대한 다른 스레드를 읽었지만 여전히 동일한 오류가 발생합니다. 다른 사람들은 GCC 대신 G++를 사용하도록 제안했습니다(이것이 말이 되나요?). 이제 다음 오류가 발생합니다.
s_socket.o: In function `do_server':
s_socket.c:(.text+0x6d4): warning: gethostbyaddr is obsolescent, usegetaddrinfo() instead.
s_socket.o: In function `host_ip':
s_socket.c:(.text+0x100): warning: gethostbyname is obsolescent, use getnameinfo() instead.
../libcrypto.a(async.o): In function `async_fibre_swapcontext':
async.c:(.text+0x248): undefined reference to `setcontext'
../libcrypto.a(async_posix.o): In function `async_fibre_makecontext':
async_posix.c:(.text+0x154): undefined reference to `getcontext'
async_posix.c:(.text+0x1b4): undefined reference to `makecontext'
make[2]: *** [link_app.] Error 1
make[2]: Leaving directory `/home/anon/Source/openssl/apps'
make[1]: *** [openssl] Error 2
make[1]: Leaving directory `/home/anon/Source/openssl/apps'
make: *** [build_apps] Error 1
내가 사용하는 cflag는 다음과 같습니다.
CFLAG= -DOPENSSL_THREADS -pthread -DDSO_DLFCN -DHAVE_DLFCN_H -mips2 -mabi=32 -Wall -DBN_DIV3W -O3 -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DAES_ASM -lpthread
옵션은 다음과 같습니다:
--cross-compile-prefix=mips- no-deprecated no-ec_nistp_64_gcc_128 no-jpake no-md2 no-rc5 no-sctp no-shared no-ssl-trace no-store no-unit-test no-zlib no-zlib-dynamic static-engine
해결책을 찾기 위해 웹 전체를 검색했습니다. 저는 C 컴파일 경험이 많지 않아서 이 시점에서 막혔습니다. 도움을 주시면 정말 감사하겠습니다. 내가 뭘 잘못했나요?