정의되지 않은 참조 'curl_free' 오류입니다. 무엇을 해야할지 찾을 수 없습니다

정의되지 않은 참조 'curl_free' 오류입니다. 무엇을 해야할지 찾을 수 없습니다

설치하려고 했는데요openn0w, 그러나 make를 실행하면 오류가 발생합니다.

../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_free'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_open'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_global_cleanup'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_easy_getinfo'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_easy_perform'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_easy_unescape'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_set_interface_alt_setting'
../../libsn0wcore/libsn0wcore.so: undefined reference to `AES_set_encrypt_key'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_release_interface'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_close'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_get_string_descriptor_ascii'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_get_configuration'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_clear_halt'
../../libsn0wcore/libsn0wcore.so: undefined reference to `AES_cbc_encrypt'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_get_device_list'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_bulk_transfer'
../../libsn0wcore/libsn0wcore.so: undefined reference to `SHA1_Update'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_easy_init'
../../libsn0wcore/libsn0wcore.so: undefined reference to `AES_set_decrypt_key'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_set_configuration'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_reset_device'
../../libsn0wcore/libsn0wcore.so: undefined reference to `SHA1_Init'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_exit'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_init'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_get_device_descriptor'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_free_device_list'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_claim_interface'
../../libsn0wcore/libsn0wcore.so: undefined reference to `libusb_control_transfer'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_easy_setopt'
../../libsn0wcore/libsn0wcore.so: undefined reference to `curl_easy_cleanup'
../../libsn0wcore/libsn0wcore.so: undefined reference to `SHA1_Final'
collect2: error: ld returned 1 exit status
Failed to link opensn0w_cli!
make[5]: *** [opensn0w_cli] Error 1
make[4]: *** [all] Error 2
make[3]: *** [subdirs] Error 2
make[2]: *** [all] Error 2
make[1]: *** [subdirs] Error 2
make: *** [all] Error 2

어디에서도 해결책을 찾을 수 없습니다. -lcurl을 추가하라는 답변을 찾아서 시도해 보았지만 make -lcurl작동하지 않았습니다. 이 문제를 해결하는 방법을 아시나요?

저는 리눅스 민트 17.3을 사용하고 있습니다. 실행해 보면 apt-get install libcurl4-openssl-dev최신 버전이 설치되어 있다고 나옵니다.

./구성 출력:

checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for library containing strerror... none required
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking whether ln -s works... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking for rm... /bin/rm
checking for mv... /bin/mv
checking for cp... /bin/cp
checking for ln... /bin/ln
checking for tar... /bin/tar
checking for ar... /usr/bin/ar
checking for ranlib... /usr/bin/ranlib
checking for xargs... /usr/bin/xargs
checking for find... /usr/bin/find
checking for uname... /bin/uname
checking for inline... inline
checking whether byte ordering is bigendian... no
checking whether make sets $(MAKE)... yes
checking how to generate dependency info... assuming gcc -MM
checking for link.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking for tput... /usr/bin/tput
checking for shared library system... GNU
checking whether we need an implib... no
checking for strftime... yes
checking for strdup... yes
checking for inet_pton... yes
checking for inet_ntop... yes
checking for gettimeofday... yes
checking for umask... yes
checking for mmap... yes
checking for arc4random... no
checking for getrlimit... yes
checking for fork... yes
checking for getpid... yes
checking for execve... yes
checking for socket... yes
checking for gethostbyname... yes
checking for inflate... no
checking for inflate in -lz... yes
checking for dlsym in -ldl... yes
checking for dlsym in -lelf... no
checking for pthread_join in -lpthread... yes
checking for libusb_init in -lusb-1.0... no
checking for readline in -lreadline... no
checking for curl_free in -lcurl... yes
checking for curl_free in -lcurldll... no
checking for SHA1_Init in -lcrypto... yes
checking for SHA1_Init in -lssl... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for an ANSI C-conforming const... yes
checking for uid_t in sys/types.h... yes
checking for inline... (cached) inline
checking whether byte ordering is bigendian... (cached) no
checking for int16_t... yes
checking for int32_t... yes
checking for int8_t... yes
checking for mode_t... yes
checking for off_t... yes
checking for pid_t... yes
checking for size_t... yes
checking for ssize_t... yes
checking whether time.h and sys/time.h may both be included... yes
checking for uint16_t... yes
checking for uint32_t... yes
checking for uint64_t... yes
checking for uint8_t... yes
checking for working volatile... yes
checking for gcc option to accept ISO C99... -std=gnu99
checking if you want to use absolute paths when building... #
checking if you want FHS-like pathnames... no
checking GCC flag(s) -std=gnu99... ok
checking GCC flag(s) -Werror-implicit-function-declaration... ok
checking if we should compile contrib modules... no
no
configure: touching .deps files
configure: creating ./config.status
config.status: creating buildsys.mk
config.status: creating extra.mk
config.status: creating include/config.h
config.status: include/config.h is unchanged

Configuration:
    opensn0w version     : 2.0.0
    Installation prefix  : /usr/local/opensn0w
    Module root directory: /usr/local/opensn0w
    Config directory     : ${prefix}/etc
    Contrib modules      : no
    Stacktrace           : no
    CFLAGS               : -g -O2

Type make to build opensn0w, and make install to install it.

답변1

바이너리를 연결하려면 -lcurl을 제공해야 합니다. make 명령줄은 하위 명령을 연결하는 대신 make 명령을 매개변수화합니다.

빌드 스크립트를 확인해야 합니다. 소스코드를 확인해보면, gnu autoconf를 사용하여 이전 소스코드를 확인할 수 있습니다. 사용

LDFLAGS=-lcurl

./configure 접두사는 구성 단계에서 더 정확한 makefile을 생성할 수 있습니다.

오류 메시지는 libcurl이 누락되었을 뿐만 아니라 다른 라이브러리(libusb, 일부 암호화 라이브러리 등)도 누락되었음을 나타냅니다.

참고 #2: 대부분의 경우 이러한 문제는 링커 플래그로 인해 발생하는 것이 아니라 시스템에 필요한 개발 패키지가 없기 때문에 발생합니다. 이것이 ./configure가 컬을 완전히 비활성화하는 이유입니다. 이 경우 설치하십시오. 데비안에서는 다음을 통해 수행할 수 있습니다.

apt-get install libcurl-dev

주문하다. 그런 다음 구성을 다시 실행하십시오.

참고 #3: 배포판 이름을 지정하고 전체 ./configure 출력을 복사하여 붙여넣으면 이 답변을 이해하기 쉬운 답변으로 확장할 수 있습니다.

해결책은 소금 섭취를 줄이는 것이 아니라 물 섭취를 늘리는 것입니다. 신장이 잘 작동하고 있다면 신체가 원하는 것을 신장이 선택한다고 믿을 수 있습니다. 그렇지 않은 경우 의사의 지시를 따르십시오.

관련 정보