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,为什么我们有它们?
我尝试打包我的应用程序并静态链接所有库。但我收到此错误。 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)
我想我需要再添加一两个静态库,但我找不到它们是什么。
我使用 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++ 项目之一,我在使用 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 属性集”,但我认为我做错了。
我想制作一个简单的静态库,并从另一个项目链接到它。有三个源文件(全部在同一目录下),从该创建库:main1.cpp,header1.h,和header2.h。main1.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.a和header1.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构建库时的所有内容?当我想构建第二个项目时,我当然不应该包含第一个项目中的所有头文件吗?
谢谢 :)
我在Google或SO上找不到任何真正的东西。我不知道是因为它不常见,还是因为我使用了错误的字词进行搜索。我在这里阅读了这个问题,但并没有真正回答我的问题。
因此,我正在尝试在C ++的SDL之上构建一个库。现在,我似乎无法弄清楚的是如何使使用我的库的项目与SDL文件完全独立,除了dll。
制作图书馆时,我与SDL2.lib和链接SDL2main.lib。我将所有SDL头文件都包含在我的库文件中。构建时,它会生成我的库文件;GGL.lib。
但是,当我想在另一个项目中测试我的库时,我必须包括所有SDL头文件,因为在我的项目中Window.h,它包括SDL.h。我想知道是否有什么办法可以使我的库头文件独立于SDL而不是SDL dll。
我有一个链接两个静态库的框架。每个静态库都是一个目标,框架是一个目标。框架封装了静态库,框架的客户端只关心调用框架代码(反过来可能调用每个静态库的代码)。是否可以让框架包含所需的头文件和目标文件?当我构建时,我得到了臭名昭著的Include of non-module header inside framework module错误。每个静态库都导出其标头,我已将标头添加为框架中的公共标头。仍然没有运气(我认为有一个不需要这个的解决方案)。
我需要在 bcc32 项目上使用 C++11 库。该库不能用 bcc32 编译,但可以用 bcc32c 编译。
我想防止在 DLL 上公开这个库。该库使用 bcc32c 编译,但我无法在 bcc32 项目上使用 bcc32c 静态库。
我正在使用 g++ 并使用 -fPIC 选项编译 C++ 静态库。我必须使用 -fPIC 选项,因为最终该库将与其他静态库链接以形成动态库。
当我在本地测试静态库时,当我不包含 -fPIC 选项时,它完全正常工作。但是,只要我使用 -fPIC 编译库,在运行时调用其中一个函数时就会收到分段错误错误。
包含 -fPIC 编译静态库的原因可能会导致运行时出现分段错误?
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 …