![](/img/trans.png)
[英]How do I link a library to my project in CodeBlocks & GCC without adding the library source to my project
[英]How do I use a static library (in my case assimp) without the source files
我有一個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
是ASSIMP_STATIC_LIB
的路徑。
編輯2:
我將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;
}
編輯3:
我認為這與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'
正如您所說的那樣,您在zlib方面遇到了問題。 您必須自己添加靜態庫中的所有依賴項,例如:
target_link_libraries(monoRenderer z)
由於您聲明標頭位於contrib/assimp/include
您可能需要將main.cpp
的include更改為
#include <Importer.hpp>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.