在错误的位置创建并查找libjawt.so文件 我有一个C++、java和cGuy项目,但目前我不能编译它。我遇到了以下错误 make[2]: *** No rule to make target '/usr/lib/jvm/default/jre/lib/amd64/libjawt.so', needed by 'build/Ygor'. Stop.

在错误的位置创建并查找libjawt.so文件 我有一个C++、java和cGuy项目,但目前我不能编译它。我遇到了以下错误 make[2]: *** No rule to make target '/usr/lib/jvm/default/jre/lib/amd64/libjawt.so', needed by 'build/Ygor'. Stop.,java,c++,makefile,cmake,java-native-interface,Java,C++,Makefile,Cmake,Java Native Interface,从我在网上读到的内容来看,这意味着编译器找不到该文件,或者它在错误的位置查找,或者它不存在。果然,它放错地方了。在我的计算机上,libjawt.so文件实际上位于/usr/lib/jvm/default/lib/libjawt.so。/usr/lib/jvm/default/中没有jre 我想让编译器准确定位它要查找的文件。要么自动,要么我告诉它在哪里。然而,我不知道如何向编译器表达这一点。我曾尝试将include_目录(“/usr/lib/jvm/default/lib”)添加到最上面的CMa

从我在网上读到的内容来看,这意味着编译器找不到该文件,或者它在错误的位置查找,或者它不存在。果然,它放错地方了。在我的计算机上,libjawt.so文件实际上位于
/usr/lib/jvm/default/lib/libjawt.so
/usr/lib/jvm/default/
中没有
jre

我想让编译器准确定位它要查找的文件。要么自动,要么我告诉它在哪里。然而,我不知道如何向编译器表达这一点。我曾尝试将
include_目录(“/usr/lib/jvm/default/lib”)
添加到最上面的CMakeLists.txt文件中,但没有任何改变。我知道
add_library
find_library
CMake函数,但如果它们能在这种情况下帮助我,我不知道如何使用它们来实现这一点

这是完整的编译器输出

Scanning dependencies of target CommandParser
[  7%] Building CXX object src/CMakeFiles/CommandParser.dir/CommandParser.cpp.o
[ 14%] Linking CXX static library libCommandParser.a
[ 14%] Built target CommandParser
Scanning dependencies of target Item
[ 21%] Building CXX object src/CMakeFiles/Item.dir/Item.cpp.o
[ 28%] Linking CXX static library libItem.a
[ 28%] Built target Item
Scanning dependencies of target Dependency
[ 35%] Building CXX object src/CMakeFiles/Dependency.dir/dependency.cpp.o
[ 42%] Linking CXX static library libDependency.a
[ 42%] Built target Dependency
Scanning dependencies of target Parser
[ 50%] Building CXX object src/CMakeFiles/Parser.dir/Parser.cpp.o
[ 57%] Linking CXX static library libParser.a
[ 57%] Built target Parser
Scanning dependencies of target Actor
[ 64%] Building CXX object src/CMakeFiles/Actor.dir/Actor.cpp.o
[ 71%] Linking CXX static library libActor.a
[ 71%] Built target Actor
Scanning dependencies of target Room
[ 78%] Building CXX object src/CMakeFiles/Room.dir/Room.cpp.o
[ 85%] Linking CXX static library libRoom.a
[ 85%] Built target Room
Scanning dependencies of target Ygor
[ 92%] Building CXX object CMakeFiles/Ygor.dir/src/main.cpp.o
make[2]: *** No rule to make target '/usr/lib/jvm/default/jre/lib/amd64/libjawt.so', needed by 'build/Ygor'.  Stop.
make[1]: *** [CMakeFiles/Makefile2:131: CMakeFiles/Ygor.dir/all] Error 2
make: *** [Makefile:104: all] Error 2
这是最上面的CMakeLists.txt文件

cmake_minimum_required (VERSION 2.6)
project (Ygor)
# Version Numbers
set (Ygor_VERSION_MAJOR 0)
set (Ygor_VERSION_MINOR 1)
set (Ygor_VERSION "${Ygor_VERSION_MAJOR}.${Ygor_VERSION_MINOR}")
# Output
set (EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/build")

# Include directories
include_directories ("${PROJECT_SOURCE_DIR}/src")
include_directories ("${PROJECT_SOURCE_DIR}/build")
include_directories ("${PROJECT_SOURCE_DIR}/build/include")
include_directories ("${PROJECT_SOURCE_DIR}/build/include/linux")
include_directories ("${PROJECT_SOURCE_DIR}/build/stanford-corenlp")
include_directories ("/usr/lib/jvm/default/lib")
add_subdirectory (src)
# Find the JNI package
find_package(JNI)
if (JNI_FOUND)
    include_directories("${JNI_INCLUDE_DIRS}")
endif()

add_executable (Ygor src/main.cpp)
target_link_libraries (Ygor Parser)
target_link_libraries (Ygor Dependency)
target_link_libraries (Ygor CommandParser)
target_link_libraries (Ygor Actor)
target_link_libraries (Ygor Item)
target_link_libraries (Ygor Room)
if (JNI_FOUND)
    target_link_libraries (Ygor ${JNI_LIBRARIES})
endif()
拨打电话:

find_package(JNI)
CMake提供了允许您指定关联库的位置(如果未找到或找到的库不正确)。您可以从项目的命令行运行
cmake
,查看缓存变量列表:

cmake -LA
这也可以在CMake GUI中轻松查看。如果
JAVA\u AWT\u库
变量的值不正确,可以再次运行CMake,为该变量提供更新的值:

cmake -DJAVA_AWT_LIBRARY=/usr/lib/jvm/default/lib/libjawt.so ..

非常感谢。我还必须更改JAVA_JVM_库,使其看起来位于正确的位置。但这似乎只是把罐子踢进了另一堵砖墙。ld找不到java库,因为它也在错误的位置查找。我将尝试搜索一个简单的解决方案,但我可能必须在它正在搜索的文件中创建许多符号链接。我接受这个答案是因为它回答了我的问题,即使它不能完全解决我的问题。