标签: static-libraries

静态库命令的区别

       ar crf library.a file1.o file2.o 
       ar rvs library.a.a file1.o file2.o
       ar rs liblprprint.a lpr_print.o
       ar rcs library.a file1.o file2.o  
Run Code Online (Sandbox Code Playgroud)

实际上我已经搜索了静态库,我发现这 4 个命令可用于在 gcc 中创建静态库。在之前的 stackoverflow 答案中搜索了 2 个命令。我想知道的是,有什么区别在这 4 个命令之间?他们在任何方面创建静态库是否有所不同。因为我们可以按照一个命令来创建一个静态库,但为什么我们有 4 个命令来创建一个静态库。这些让我相信所有 4 个命令之间一定存在差异。我在谷歌上尝试过,但他们给出了命令,但我没有发现它们之间的差异。所以有人知道为什么我们在创建时有 4 个命令要处理静态库?它们之间有什么区别?我的意思是 rs、rcs、rvs,为什么我们有它们?

gcc static-libraries

3
推荐指数
1
解决办法
2418
查看次数

对 `lzma_code' 的未定义引用

我尝试打包我的应用程序并静态链接所有库。但我收到此错误。 Makefile 如下所示:

CC          = gcc
INCPATH     = -I/home/johnny/Application/FileBasedReG/include/RealityGrid
LIBS        = -L/home/johnny/Application/FileBasedReG/lib/RealityGrid -lReG_Steer -l:libxml2.a -l:libncurses.a -l:libm.a -l:libz.a -l:libtermcap.a

OBJECTS     = mini_steerer.o

TARGET      = mini_steerer

###### Compile ######
all: $(TARGET)

$(TARGET): $(OBJECTS)
    $(CC) $(INCPATH) -o $(TARGET) $(OBJECTS) $(LIBS)

mini_steerer.o: ./mini_steerer.c ./mini_steerer.h
    $(CC) -c $(INCPATH) -o mini_steerer.o ./mini_steerer.c
Run Code Online (Sandbox Code Playgroud)

我想我需要再添加一两个静态库,但我找不到它们是什么。

linker gcc static-libraries

3
推荐指数
1
解决办法
1万
查看次数

如何在 windows 窗体应用程序 vc++ 中导入 C 静态库

我使用 VS 创建了一个静态“C”库。

我正在为另一个 VS 控制台 C 应用程序使用相同的库文件,它工作正常,但是当我使用 Windows 窗体应用程序时,它无法正常工作。

在这个论坛中提到了很多问题,但没有得到帮助。

是否有任何命名约定可以从 Windows 窗体 Managed c++ 调用静态库函数?

得到这样的错误

错误 LNK2028:未解析的令牌 (0A000032)“enum STATUS __clrcall xyz(unsigned char)”(?xyz@@$$FYM?AW4STATUS@@E@Z) 在函数 __catch$?button3_Click@Form1@Myapp@@$$FA 中引用$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z$0

但是我应该为控制台和 Windows 应用程序使用相同的静态库。

c c++ static-libraries windows-forms-designer visual-studio

3
推荐指数
1
解决办法
1337
查看次数

CMake 链接另一个项目中的单个类

它是我的第一个 C++ 项目之一,我在使用 CMake 时遇到了问题。

我有一个带有可执行文件的 MyProject,我得到了一个带有 boost 单元测试的项目测试。我尝试了以下方法,但失败了。显然我不能以这种方式有两个可执行文件,我不知道如何修复它。

这是 MyProject 的 CMake

project (MyProject)
find_package( Boost 1.48.0  COMPONENTS thread )
set(MYPROJECT_SRCS main.cpp foo.h foo.cpp)
add_executable(MyProject ${MYPROJECT_SRCS})
target_link_libraries(MyProject  ${Boost_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

这是测试的 CMake

project (tests)
find_package( Boost 1.48.0 COMPONENTS thread unit_test_framework) 
find_package( Boost 1.48.0  COMPONENTS thread )
include_directories("../MyProject")
set(TEST_SRCS test.cpp )
add_executable(tests ${TEST_SRCS})
target_link_libraries(tests ${Boost_LIBRARIES} MyProject)
add_test( example_test tests )
Run Code Online (Sandbox Code Playgroud)

测试/CMakeLists.txt:13 (target_link_libraries) 中的 CMake 错误:
EXECUTABLE 类型的目标“MyProject”可能无法链接到另一个
目标。可以只链接到 STATIC 或 SHARED 库,或者链接到具有 ENABLE_EXPORTS 属性集的可执行文件。

我试图“ENABLE_EXPORTS 属性集”,但我认为我做错了。

c++ cmake shared-libraries static-libraries

3
推荐指数
1
解决办法
4573
查看次数

链接到项目找不到头文件

我想制作一个简单的静态库,并从另一个项目链接到它。有三个源文件(全部在同一目录下),从该创建库:main1.cppheader1.h,和header2.hmain1.cpp包含行#include "header1.h",反过来又header1.h包含行#include "header2.h"。为了创建库,我add_library(foo STATIC main1.cpp)在我的CMakeLists.txt文件中使用。运行cmake,然后按预期make创建文件libfoo.a

然后我有另一个项目,有一个文件main2.cpp,其中包含行#include "header1.h". 在CMakeLists.txt这个项目的文件中,我使用add_executable(bar main2.cpp)target_link_libraries(bar foo.a)创建一个链接到我的静态库的可执行文件。然后我复制foo.aheader1.h文件并将它们放在与此项目相同的目录中。

问题是,在编译第二个项目时,出现以下错误:

header1.h: fatal error: header2.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

所以它告诉我header2.h无法找到,即使它在header1.h. 但是,我会认为 的内容foo.a将包含header2.h构建库时的所有内容?当我想构建第二个项目时,我当然不应该包含第一个项目中的所有头文件吗?

谢谢 :)

c++ ubuntu makefile cmake static-libraries

3
推荐指数
1
解决办法
1104
查看次数

如何使基于SDL构建的库不需要SDL头文件

我在Google或SO上找不到任何真正的东西。我不知道是因为它不常见,还是因为我使用了错误的字词进行搜索。我在这里阅读了这个问题,但并没有真正回答我的问题。

因此,我正在尝试在C ++的SDL之上构建一个库。现在,我似乎无法弄清楚的是如何使使用我的库的项目与SDL文件完全独立,除了dll

制作图书馆时,我与SDL2.lib和链接SDL2main.lib。我将所有SDL头文件都包含在我的库文件中。构建时,它会生成我的库文件;GGL.lib

但是,当我想在另一个项目中测试我的库时,我必须包括所有SDL头文件,因为在我的项目中Window.h,它包括SDL.h。我想知道是否有什么办法可以使我的库头文件独立于SDL而不是SDL dll

c++ sdl header static-libraries

3
推荐指数
1
解决办法
472
查看次数

Xcode:在框架中使用静态库?

我有一个链接两个静态库的框架。每个静态库都是一个目标,框架是一个目标。框架封装了静态库,框架的客户端只关心调用框架代码(反过来可能调用每个静态库的代码)。是否可以让框架包含所需的头文件和目标文件?当我构建时,我得到了臭名昭著的Include of non-module header inside framework module错误。每个静态库都导出其标头,我已将标头添加为框架中的公共标头。仍然没有运气(我认为有一个不需要这个的解决方案)。

macos xcode static-libraries ios

3
推荐指数
1
解决办法
7846
查看次数

如何在 bcc32 上使用使用 bcc32c 构建的静态库

我需要在 bcc32 项目上使用 C++11 库。该库不能用 bcc32 编译,但可以用 bcc32c 编译。

我想防止在 DLL 上公开这个库。该库使用 bcc32c 编译,但我无法在 bcc32 项目上使用 bcc32c 静态库。

c++builder static-libraries c++11

3
推荐指数
1
解决办法
586
查看次数

为什么在编译静态库时包含 -fPIC 会导致运行时出现分段错误?

我正在使用 g++ 并使用 -fPIC 选项编译 C++ 静态库。我必须使用 -fPIC 选项,因为最终该库将与其他静态库链接以形成动态库。

当我在本地测试静态库时,当我不包含 -fPIC 选项时,它完全正常工作。但是,只要我使用 -fPIC 编译库,在运行时调用其中一个函数时就会收到分段错误错误。

包含 -fPIC 编译静态库的原因可能会导致运行时出现分段错误?

c++ compilation shared-libraries static-libraries fpic

3
推荐指数
1
解决办法
4076
查看次数

How to create a shared c library from a static c and c++ library?

Summarize

I'm integrating a static library based on c/c++ into a shared library based on c (using cmake on linux).

I have errors like this: libmylib.so: undefined reference to `std::ios_base::Init::Init()'

The problem is strongly related with the use of c++ and its linking to the shared library. If I avoid the shared library (even another static library) no error occurs. Because of my project I can not avoid that shared library which uses the static library.

How to generate a …

c c++ cmake shared-libraries static-libraries

3
推荐指数
1
解决办法
78
查看次数