我有一个libassimp.a文件和头文件。我该如何使用该库?
我使用set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem ${ASSIMP_INCLUDE_DIR}")
将标题文件添加到我的项目中。 ASSIMP_INCLUDE_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})
ASSIMP_STATIC_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看起来像这样:
#include <assimp/Importer.hpp>
#include <cstdlib>
int main() {
Assimp::Importer importer;
return EXIT_SUCCESS;
}
EDIT3:
我认为它与zlib有关,因为所有的错误似乎都有这个共同点我认为:
undefined reference to `uncompress'
undefined reference to `inflateInit2_'
undefined reference to `inflate'
undefined reference to `inflateEnd'
undefined reference to `inflateReset'
undefined reference to `inflateSetDictionary'
undefined reference to `get_crc_table'
undefined reference to `crc32'
答案 0 :(得分:1)
正如你所说,你遇到了zlib的问题。您必须自己添加静态库中的所有依赖项,例如:
Define_Channel()
由于您声明标题位于target_link_libraries(monoRenderer z)
,因此您可能希望将contrib/assimp/include
中的包含更改为
main.cpp