>  기사  >  컴파일된 C++ 라이브러리 함수를 찾을 수 없습니다.

컴파일된 C++ 라이브러리 함수를 찾을 수 없습니다.

WBOY
WBOY앞으로
2024-02-08 23:57:19906검색

PHP 편집기 Youzi가 C++ 프로그램을 작성할 때 때때로 "컴파일된 C++ 라이브러리 함수를 찾을 수 없습니다"라는 문제에 직면할 수 있습니다. 이 오류는 일반적으로 연결 단계에서 발생하며 컴파일러가 필요한 라이브러리 함수를 찾을 수 없음을 의미합니다. 이 문제에는 라이브러리 파일 경로의 잘못된 구성, 라이브러리 파일의 부적절한 설치 등 여러 가지 이유가 있을 수 있습니다. 이 문제를 해결하려면 라이브러리 파일 경로를 확인하고 라이브러리 파일을 다시 설치하고 컴파일러를 업데이트하여 문제를 해결할 수 있습니다. 이 문서에서는 이러한 일반적인 컴파일 오류를 수정하는 방법을 자세히 설명합니다.

질문 내용

저는 libmylibrary.a이라는 파일과 myfunction()이라는 함수가 포함된 mylibrary.h 이라는 헤더 파일을 가지고 있습니다. 이를 cpp 파일(helloworldjni.cpp)과 결합하여 native.dll이라는 새 라이브러리를 만들었습니다. 그런데 jni를 사용하여 Java에서 native.dll을 컴파일하려고 하면 libmylibrary.a 및 mylibrary.h에서 함수를 찾을 수 없습니다.

mylibrary.h

으아악

다음은 제가 따랐던 단계입니다

1. jni

통합을 위한 Java 파일(helloworldjni.java)을 생성합니다. 으아악

2. 이 명령을 사용하여 helloworldjni.h 파일을 생성하세요

으아악

3. mylibrary.h 파일과 helloworldjni.h 파일을 내 cpp 파일(helloworldjni.cpp)과 통합합니다. 으아악

4. 이 파일을 컴파일합니다(.o 파일 생성)

으아악

5. .o 파일을 .dll 파일로 생성

으아악

6. helloworldjni.java를 컴파일하고 실행하세요

으아악

다음 오류가 발생했습니다:

으아악

libmylibrary.a의 함수를 인식하도록 Java 코드 컴파일에 libmylibrary.a를 어떻게 통합하나요?

ps: 순수 C++를 사용하여 myfunction()을 호출할 수 있으므로 libmylibrary.a에는 아무런 문제가 없다고 확신하지만 jni를 사용할 때 알 수 없는 일종의 연결 문제가 있는 것 같습니다.

해결 방법

모든 단계를 시도해 보았지만 약간의 변경 사항만 적용하면 효과가 있었습니다. 추가 빌드 스크립트:

으아악

그러나 몇 가지 주의사항이 있습니다:

    창에서는 일부 매크로를 설정해야 할 가능성이 높으므로
  1. jniexport 实际上是 __declspec(dllexport),而不是 __declspec(dllimport)
  2. Linux에서 링크하려면
  3. C++ 파일을 컴파일*.so 文件,您需要使用 -fpic

위 내용은 컴파일된 C++ 라이브러리 함수를 찾을 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제