子妙815 2021-03-17 11:49 采纳率: 0%
浏览 61

libcurl.a Link error When compiling the code

curl:curl-7.59.0
ssl:mbedtls-mbedtls-2.7.19
export CC=arm-linux-androideabi    Cross compile and so on...

 

$ cd $curPath/code/mbedtls-mbedtls-2.7.19
$ make clean 
$ export SHARED=1
$ export CFLAGS="-I$curPath/code/mbedtls-mbedtls-2.7.19/configs -DMBEDTLS_CONFIG_FILE='<config-ccm-psk-tls1_2.h>'"
$make 
$make  install  DESTDIR=$curPath/code/lib4audit
$ cd -

编译成功并在目录./code/lib4audit/lib/得到三个库文件 libmbedtls.a libmbedx509.a libmbedcrypto.a 

编译CRUL库

$ cd $curPath/code/curl-7.59.0/ 
$export LDFLAGS="$curPath/code/lib4audit/lib/libmbedtls.a $curPath/code/lib4audit/lib/libmbedx509.a  $curPath/code/lib4audit/lib/libmbedcrypto.a"
$./configure --host=$HOST  --prefix=$curPath/code/lib4audit --with-mbedtls=$curPath/code/lib4audit   --enable-optimize --disable-debug --disable-curldebug --disable-symbol-hiding --disable-dict --disable-gopher --disable-imap --disable-pop3 --disable-rtsp --disable-smtp --disable-telnet --disable-sspi --disable-smb --disable-ntlm-wb --disable-tls-srp --disable-soname-bump --disable-manual --disable-file --disable-ldap --disable-ldaps --disable-tftp --enable-http --disable-ftp --disable-ipv6
$make
$make install

编译成功并在目录./code/lib4audit/lib/得到“libcurl.a”库文件 ,查看库配置 编译库支持SSL

$ ./code/lib4audit/bin/curl-config  --features
SSL
UnixSockets
libz
AsynchDNS
NTLM

----------------------------------分割线-----------------------------------------

MY_LIBRARY_PATH = $pwd/code/lib4audit/lib/

特别说明:这个程序需要运行在第三方的设备里。我不打算使用动态库,因为第三方设备的系统可能没有对应的动态,这样编译虽然可执行文件大小 大一些,可以独立于设备与设备减小关联性。

LDFLAGS=  -lm -lc -lz -L${MY_LIBRARY_PATH}  ${MY_LIBRARY_PATH}/libmbedtls.a  ${MY_LIBRARY_PATH}/libmbedx509.a   ${MY_LIBRARY_PATH}/libmbedcrypto.a ${MY_LIBRARY_PATH}/libcurl.a  ${MY_LIBRARY_PATH}/libpcap.a 

 
DD+= -DPEER_BIGENDIAN 
OBJS = main.o cJSON.o conf.o common.o  upload.o aes_pkcs5padding.o log.o md5.o portal_info.o

.c.o:
	$(CC) $(DD) -c  $(CFLAGS) $*.c

all:	simple

simple:  $(OBJS)
	$(CC) $(CFLAGS)  -o $@ $(OBJS) $(LDFLAGS)
clean:
	$(RM) -f *.o *~  simple

出现了一下报错,请问怎么处理。

        aes_pkcs5padding.o:aes_pkcs5padding.c:function MBEDTLS_AES_CBC_PKCS5_BASE64_Encrypt: error: undefined reference to 'mbedtls_aes_crypt_cbc'
        aes_pkcs5padding.o:aes_pkcs5padding.c:function MBEDTLS_AES_ECB_PKCS5_BASE64_Decrypt: error: undefined reference to 'mbedtls_base64_decode'
        aes_pkcs5padding.o:aes_pkcs5padding.c:function MBEDTLS_AES_ECB_PKCS5_BASE64_Encrypt: error: undefined reference to 'mbedtls_base64_encode'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_close: error: undefined reference to 'mbedtls_pk_free'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_close: error: undefined reference to 'mbedtls_x509_crt_free'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_close: error: undefined reference to 'mbedtls_x509_crt_free'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_close: error: undefined reference to 'mbedtls_x509_crl_free'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_strerror'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_ssl_get_peer_cert'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_x509_crt_info'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_x509_crt_init'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_x509_crt_parse_der'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_x509_crt_free'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_x509_crt_free'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_step2: error: undefined reference to 'mbedtls_pk_write_pubkey_der'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_random: error: undefined reference to 'mbedtls_strerror'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_random: error: undefined reference to 'mbedtls_strerror'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function Curl_mbedtls_version: error: undefined reference to 'mbedtls_version_get_number'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crt_init'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crt_parse_file'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crt_parse_path'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crt_init'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crt_parse_file'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_pk_init'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_pk_parse_keyfile'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_strerror'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crl_init'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_x509_crl_parse_file'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_pk_can_do'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_ssl_conf_cert_profile'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_ssl_conf_renegotiation'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_ssl_conf_session_tickets'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_ssl_conf_ca_chain'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_ssl_set_hostname'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-mbedtls.o):mbedtls.c:function mbed_connect_common: error: undefined reference to 'mbedtls_ssl_conf_own_cert'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-curl_ntlm_core.o):curl_ntlm_core.c:function encrypt_des: error: undefined reference to 'mbedtls_des_key_set_parity'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-curl_ntlm_core.o):curl_ntlm_core.c:function encrypt_des: error: undefined reference to 'mbedtls_des_init'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-curl_ntlm_core.o):curl_ntlm_core.c:function encrypt_des: error: undefined reference to 'mbedtls_des_setkey_enc'
        /home/route/plugin/T15/code/lib4audit/lib/libcurl.a(libcurl_la-curl_ntlm_core.o):curl_ntlm_core.c:function encrypt_des: error: undefined reference to 'mbedtls_des_crypt_ecb'
        collect2: error: ld returned 1 exit status

请指教,谢谢啊

 

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 01:23
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题是由于编译时缺少某些必要的库函数定义导致的。这些问题通常出现在动态链接库中,例如mbedtls-mbedtls-2.7.19和libcurl-a。这些库包含了许多功能,包括加密、签名验证等。

    解决这个问题的方法是在编译过程中添加缺失的库头文件和源代码到LDFLAGS变量中。你可以通过手动查找并添加缺失的库来实现这一点,或者使用一些工具(如gdb或valgrind)进行调试和定位问题。

    这里是一个简单的示例,展示如何手动添加缺失的库:

    # 添加缺失的头文件和源代码到LDFLAGS
    LDFLAGS+=" -lssl -lcrypto"
    
    # 进行编译
    make
    

    这将使编译器在链接时尝试加载这些库,并在遇到错误时提供更多的信息。

    如果你不希望手动添加这些库,你也可以考虑使用静态链接库,但请注意,这可能会增加你的应用的体积和复杂性,因为它需要在运行时加载所有的依赖项。

    此外,你还可以使用一些构建工具(如makefile或autotools)来自动管理这些库的依赖关系。例如,在autotools环境下,你可以使用autoreconf命令来获取最新的依赖列表,并使用configure脚本来安装所需的库。

    如果你已经知道哪些库是你正在使用的,你可以尝试从它们的文档中查找是否提供了相关的头文件和源代码。然后,你可以在LDFLAGS中添加这些库的位置。

    最后,确保你的编译环境正确设置,以便找到这些库的头文件和源代码。如果你不确定,你可以参考相关库的文档或在线资源。

    评论

报告相同问题?