我一直在尝试为MIPS架构(大端)交叉编译Ncat,并且我确实需要SSL支持,所以我首先必须编译OpenSSL。我从 Github 下载了最新版本并进行了如下配置,因为我的工具链二进制文件的命名类似于 'mips-gcc mips-ld...etc :
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 中的信息,但我仍然遇到相同的错误。其他人建议使用 G++ 而不是 GCC(这有意义吗?)。现在我得到这个错误:
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
我使用的 cflags 是:
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 不太有经验,在这一点上我陷入了困境。我真的很感激一些帮助。我究竟做错了什么?