Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在没有源文件的情况下,如何使用静态库(在我的例子中是assimp)_C++_Cmake_Static Libraries_Assimp - Fatal编程技术网

C++ 在没有源文件的情况下,如何使用静态库(在我的例子中是assimp)

C++ 在没有源文件的情况下,如何使用静态库(在我的例子中是assimp),c++,cmake,static-libraries,assimp,C++,Cmake,Static Libraries,Assimp,我有一个libassimp.a文件和头文件。我怎样使用图书馆 我正在使用集(CMAKE\u CXX\u FLAGS“${CMAKE\u CXX\u FLAGS}-isystem${ASSIMP\u INCLUDE\u DIR}”)将头文件添加到我的项目中。。ASSIMP\u INCLUDE\u DIR为../contrib/ASSIMP/INCLUDE 现在,当我在main.cpp中使用某个类时,它会给我关于某些函数的未定义引用的错误,因为显然我没有源文件 将libassimp.a添加到编译标志

我有一个libassimp.a文件和头文件。我怎样使用图书馆

我正在使用
集(CMAKE\u CXX\u FLAGS“${CMAKE\u CXX\u FLAGS}-isystem${ASSIMP\u INCLUDE\u DIR}”)将头文件添加到我的项目中。
。ASSIMP\u INCLUDE\u DIR为../contrib/ASSIMP/INCLUDE

现在,当我在main.cpp中使用某个类时,它会给我关于某些函数的未定义引用的错误,因为显然我没有源文件

将libassimp.a添加到编译标志时,使用make时会出现以下错误:

make[3]: *** No rule to make target `../contrib/assimp/lib/libassimp.a',
...
main.cpp:7:32: fatal error: assimp/Importer.hpp: No such file or directory
....
Linking CXX static library libassimp.a
我不明白这些信息。也许他们在那里是因为它试图在libassimp.a实际存在之前访问它?这是某种并发问题吗

无论如何,如果我再次调用
make
,那么我会得到不同的错误,即对我没有使用的东西的一堆未定义的引用,例如

../contrib/assimp/lib/libassimp.a(AssbinLoader.cpp.o): In function `Assimp::AssbinImporter::InternReadFile(std::string const&, aiScene*, Assimp::IOSystem*)':
AssbinLoader.cpp:(.text+0x2a49): undefined reference to `uncompress'
编辑:

我使用CMake编译如下:

target_link_libraries(monoRenderer [some other libraries] ${ASSIMP_STATIC_LIB})
#include <assimp/Importer.hpp>
#include <cstdlib>

int main() {
    Assimp::Importer importer;
    return EXIT_SUCCESS;
}
ASSIMP\u STATIC\u LIB
是libassimp.a的路径

EDIT2:

我将我的CMake文件缩减为:

cmake_minimum_required(VERSION 2.8.12)
project(monoRenderer)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")

file(GLOB_RECURSE CXX_SRCS src/*.cpp)
file(GLOB_RECURSE C_SRCS src/*.c)
file(GLOB_RECURSE HPP_HDRS src/*.hpp)
file(GLOB_RECURSE H_HDRS src/*.h)
set(SRCS "${C_SRCS};${CXX_SRCS}")
set(HDRS "${H_HDRS};${HPP_HDRS}")

include_directories(${PROJECT_SOURCE_DIR}/contrib/assimp/include)

add_executable(monoRenderer ${SRCS} ${HDRS})
target_link_libraries(monoRenderer ${PROJECT_SOURCE_DIR}/contrib/assimp/lib/libassimp.a)
头文件位于
contrib/assimp/include
中,libassmip.a位于
contrib/assimp/lib
中。它仍然不起作用,错误和以前一样。 我的main.cpp如下所示:

target_link_libraries(monoRenderer [some other libraries] ${ASSIMP_STATIC_LIB})
#include <assimp/Importer.hpp>
#include <cstdlib>

int main() {
    Assimp::Importer importer;
    return EXIT_SUCCESS;
}

正如你所说的,你在使用zlib时遇到了问题。您必须自己添加静态库中的所有依赖项,例如:

target_link_libraries(monoRenderer z)
由于您声明您的标题位于
contrib/assimp/include
中,您可能希望将
main.cpp
中的include更改为

#include <Importer.hpp>
#包括

你可以发布你如何编译你的项目吗?你错过了
cmake
标签。直接使用
cmake\u CXX\u标志可能不是你想要的。您应该使用
include\u目录
添加include目录。您是否在其他地方使用
${ASSIMP\u INCLUDE\u DIR}
?我将其更改为
INCLUDE\u directories
,但我收到了相同的错误,一定是其他原因。是的,我正在将其用于我的
ExternalProject\u Add\u步骤
以将标题移动到正确的文件夹。@mistapink:我添加了main.cpp和CMake文件的最小工作示例。