标签: static-libraries

分发Windows C++库:如何决定是创建静态库还是动态库?

我们一直在将 Java 和 .NET API 库转换为 C++,并试图找出将编译版本分发给其他开发人员以与他们的自定义应用程序一起使用的最佳方法。应该是静态库还是动态库?

我们需要为 Win32 和 Win64 创建(我想每个目标操作系统都有调试版本和发布版本)。考虑到我在尝试确保所有引用的库都匹配(/MT 与 /MD)时遇到的所有挫败感,我想知道是否需要在这里做出一个决定来简化其他开发人员的工作。

当我dumpbin /all <static library file name> | find /i "msvc在静态库上运行时,我看不到任何运行时引用(与在 .exe 或 .dll 上执行相同操作时不同)。这是否表明运行时尚未链接,并且这使开发人员在开发和构建自己的应用程序时可以更灵活地创建 /MT 或 /MD?

哪种方法可以让开发人员的生活更轻松?

c++ shared-libraries static-libraries

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

为设备和模拟器创建32位和64位静态库 - Xcode

我有这个支持64位的SDK.无论出于何种原因,该库不构建在iOS模拟器上.为了避免这种情况,我创建了自己的静态库,实例化头文件并实现所有内容.这种方法一直有效,并允许我在模拟器和设备上构建和运行项目(标准库用于设备,我的静态库用于模拟器).

现在我们有64位和32位设备和模拟器,我的静态库不适用于32位模拟器.但是,它确实为所有设备(32位和64位)和64位模拟器构建.

有谁知道如何创建一个适用于32位和64位设备和模拟器的静态库?

64-bit xcode 32-bit static-libraries ios

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

Visual Studio 2015社区ZeroMQ静态库链接错误

我试图在Visual Studio 2015中使用ZeroMQ的静态库.我通过克隆git存储库生成它,将fd.hpp中的windows.hpp include更改#include <windows.hpp>#include "windows.hpp",将libsodium放在正确的位置,然后批量构建所有内容vs2015解决方案.

在程序中我试图使用ZeroMQ,我包括ZeroMQ包含目录,包括ZeroMQ发布静态目录(libzmq\bin\Win32\Release\v140\static),添加了libzqm.lib作为附加依赖项,定义了ZMQ_STATIC和_CRT_SECURE_NO_WARNINGS对于我在程序中执行的其他一些操作,并将运行时库更改为多线程/ MT.

当我在这一点上尝试编译时,我得到以下错误:

1>------ Build started: Project: HttpServer, Configuration: Release Win32 ------
1>  main.cpp
1>libzmq.lib(zmq.obj) : error LNK2001: unresolved external symbol ___WSAFDIsSet@8
1>libzmq.lib(socket_poller.obj) : error LNK2001: unresolved external symbol ___WSAFDIsSet@8
1>libzmq.lib(select.obj) : error LNK2001: unresolved external symbol ___WSAFDIsSet@8
1>libzmq.lib(zmq.obj) : error LNK2001: unresolved external symbol __imp__select@20
1>libzmq.lib(socket_poller.obj) : error LNK2001: unresolved external symbol __imp__select@20
1>libzmq.lib(select.obj) : error LNK2001: unresolved external symbol __imp__select@20
1>libzmq.lib(signaler.obj) : error LNK2001: unresolved external …
Run Code Online (Sandbox Code Playgroud)

c++ static-libraries zeromq static-linking visual-studio-2015

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

Autotools-使用不同的名称构建静态和共享库

在构建静态和共享库的cmake的Windows我不得不追加“-static”的静态库名(在Windows中,静态的共享库可以有.LIB扩展名),所以产生的文件名的静态库LIBlib-static.lib。在任何正在运行的系统上,如何使用automake + libtool(即指示libtool将“ -static ” 附加到生成的静态库文件名之后)来实现它?

linux windows autotools shared-libraries static-libraries

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

在链接/编译时静态包含所有库而不是库的一部分

如果我要将某个库静态链接到我的应用程序,据我所知,链接器可以以某种方式进行优化,以便在生成最终可执行文件时仅放置库中使用过的部分。如果我想生成一个包含库的所有部分而不是我实际使用的部分的可执行文件,有没有办法在编译时关闭它,可能使用编译器标志或任何其他特定方法?

c gcc static-libraries

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

Rust 项目可以共享构建工件吗?

我有一个生成静态库的 Rust 项目,还有其他几个项目通过Cargo.toml条目创建依赖于该库的应用程序:

[dependencies]
lib_project = { path = "/path/to/lib_project" }
Run Code Online (Sandbox Code Playgroud)

目前,每个应用程序将lib_project在其构建期间构建一个单独的副本。有没有办法让他们使用现有的构建库/path/to/lib_project/target?或者更一般地说,有没有办法让多个 Rust 项目共享公共依赖项的构建工件?

static-libraries rust rust-cargo

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

无法将 macOS-arm64 的库与 macOS-arm64 的可执行文件链接


\n我在 **Monterey M1 MacBook** 上创建构建系统时遇到一些问题:\n

到目前为止,我有一个可用的 Makefile 来构建和链接库。
\n(简化:g++ -c所有 .cpp 文件转换为 .o 文件 \xe2\x86\x92 ar -r <.o files> libmyLibrary.a>\n
\xe2\x86\x92效果很好

\n

问题:
\n当我尝试构建一个使用所述libmyLibrary.a. 源文件的编译工作正常,但我收到以下(看似无意义的)链接器警告:

\n
ld: warning: ignoring file /Path/to/lib/libmyLibrary.a,\nbuilding for macOS-arm64 but attempting to link with file built for macOS-arm64\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x86\x92 我 ofc 然后得到一些Undefined symbols for architecture arm64: ... <stuff from library> referenced from: <stuff from executable>

\n

为与图书馆相同的目标而建设怎么会成为问题呢?

\n

c++ g++ linker-errors static-libraries linker-warning

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

如何解决链接器错误"找不到-lgcc_s"

我有3个小文件,用于制作静态库和应用程序:

test.h

#ifndef TEST_H
#define TEST_H

class Test
{
    public:
        Test();
};

extern Test* gpTest;

#endif
Run Code Online (Sandbox Code Playgroud)

TEST.CPP

#include "test.h"

Test::Test()
{
    gpTest = this;
}   

Test test;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "test.h"
#include <iostream>

using namespace std;

Test* gpTest = NULL;

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

建立

g++ -c test.cpp -o test.o
ar cr test.a test.o
g++ -c main.cpp -o main.o
g++ main.o -o app -Wl,--whole-archive -L/home/dumindara/intest/test.a -Wl,-no--whole-archive
Run Code Online (Sandbox Code Playgroud)

错误(链接步骤)

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我尝试了一切:使用-static-libgcc并链接到静态libstdc ++.无法让这个工作.这完全归功于--whole-archive标志.但我离不开它.

c++ linux linker g++ static-libraries

0
推荐指数
2
解决办法
1559
查看次数

c ++命名空间问题

嗨,任何人都可以帮我这个代码.我是c ++的新手

#include <stdio.h>
#include<iostream>
using namespace std;

namespace manish
{
  double mean(double a, double b);
}

double mean(double a, double b)
{
  return (a+b) / 2;
}
Run Code Online (Sandbox Code Playgroud)

我想为此制作静态库,我使用命令g ++ calc_mean.cpp -o mean.o它给我以下错误

/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?或者如何为函数创建命名空间,以便可以通过使用其名称空间在其他位置使用它

c++ g++ static-libraries

0
推荐指数
1
解决办法
3288
查看次数

向Makefile添加功能会产生错误: - "这里有多个definitoon ......"

我已经获得了一个已经正常工作的Makefile,它实际上工作正常.

Makefile内容可以在这篇文章中找到...

关于Makefile的问题 - 什么是"$ +"以及这里调用的.c文件/依赖项在哪里?

我从上面提到的上一篇文章中分别提出这个问题,因为它涉及一个不同的问题,并将其添加到该问题将不必要地增加其长度.

现在我添加了一个在很多地方经常使用的功能,所以我认为创建一个单独的文件将是一个不错的主意,所以我创建linklayer.c并添加linklayer.o$LIBOBJS.

我加了这个......

 LIBOBJS= linklayer.o csum.o compact.o protoname.o headers.o 
 parseargs.o cryptomod.o crc32.o
Run Code Online (Sandbox Code Playgroud)

还有这个

 linklayer.o:    linklayer.c
    $(CC) -o $@ -c -I. $(CFLAGS) $+
Run Code Online (Sandbox Code Playgroud)

我已经声明了sendip_module.h已经在项目中存在的每个模块中声明和访问的函数.

但现在这个多重定义错误即将来临......我做错了什么或误解了什么?

注意: "ipv6_opts"在ipv6.h中定义

$ make all
for subdir in mec ; do \
    cd $subdir ;\
    make  ;\
    cd ..  ;\
    done
make[1]: Entering directory `/home/udit/Desktop/sendip-2.5-mec-2/mec'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/home/udit/Desktop/sendip-2.5-mec-2/mec'
  gcc-4.4 -o ipv6.so -fPIC -fsigned-char -pipe …
Run Code Online (Sandbox Code Playgroud)

gcc makefile static-libraries static-linking

0
推荐指数
1
解决办法
340
查看次数