簡體   English   中英

我如何在沒有源文件的情況下使用靜態庫(在我的情況下為assimp)

[英]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_LIBASSIMP_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM