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를 사용할 때 알 수 없는 일종의 연결 문제가 있는 것 같습니다. 해결 방법 모든 단계를 시도해 보았지만 약간의 변경 사항만 적용하면 효과가 있었습니다. 추가 빌드 스크립트:으아악
그러나 몇 가지 주의사항이 있습니다:
jniexport
实际上是 __declspec(dllexport)
,而不是 __declspec(dllimport)
*.so
文件,您需要使用 -fpic
위 내용은 컴파일된 C++ 라이브러리 함수를 찾을 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!