标签: static-libraries

使用CMake和GCC在Mac上构建静态库?

问候所有,

我有一个静态库,我稍后将其与我的应用程序链接.我的开发环境是CMake,GCC(Linux,Mac),MinGW(Windows).

我可以在Linux和Windows上编译静态库而没有任何问题.(我甚至可以在Mac上的应用程序中构建共享库).

编辑:我将库编译为SHARED库,它运行良好!

我已按如下方式配置CMakeFile来构建静态库:

add_library(centi STATIC ${base_srcs} ${crv_srcs} ${node_srcs} ${trnk_srcs} ${defl_srcs} ${infl_srcs} ${track_srcs} ${callback_srcs} ${extract_srcs})
Run Code Online (Sandbox Code Playgroud)

在链接阶段,它会产生以下错误并以某种方式构建"libcenti.a".

Linking C static library
lib/libcenti.a /usr/bin/ranlib: file:
lib/libcenti.a(crv_in_rgn_to_bnry_img.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_initialize_by_circle.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_initialize_flgs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_nodal_interval_min_and_max.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_remove_all_nodes.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_reset_nodal_forces.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_center_coords.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_left_ptch_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_out_rgn_mean_and_var.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_para.c.o) has …
Run Code Online (Sandbox Code Playgroud)

c++ macos gcc cmake static-libraries

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

结合静态库

假设我有三个C静态库,比如libColor.a,它依赖于*libRGB.*a,而后者依赖于libPixel.a.据说库libColor.a依赖于库libRGB.a,因为libColor.a中有一些对libRGB.a中定义的符号的引用.如何将所有上述库组合到一个独立的新libNewColor.a中?

独立意味着新库应该定义所有符号.所以在链接时我只需要给出-lNewColor.新库的大小应该是最小的,即它不应该包含libRGB.a中的任何符号,libColor.a等不使用.我在ar命令中使用了各种选项来试运气(用于创建和更新静态库/档案) ).

c linux static-libraries unix-ar static-linking

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

初始化静态库中嵌入的qt资源

我有下一个情况:我需要在独立静态库中创建小部件,然后将其与最终应用程序链接(visual c ++ 9.0,qt 4.5).此静态窗口小部件库包含一些资源(图标),并包含多个.cpp文件(每个文件包含独立窗口小部件).据我所知,我必须初始化qt资源系统,如果我在静态库中使用它们(资源),调用"Q_INIT_RESOURCE(resource_file_name)".我用下一个代码(在静态库中的每个.cpp文件中)解决了这个问题:


#include <QAbstractButton>

namespace {
struct StaticLibInitializer
{
    StaticLibInitializer()
    {
        Q_INIT_RESOURCE(qtwidgets_custom_resources);
    }
};
StaticLibInitializer staticLibInitializer;
} 

// ... widget code ....

我没有使用第一种方法,而是使用初始化代码在静态库项目中创建了单独的init.cpp文件(以避免在每个.cpp文件中包含初始化代码),但这不起作用.

为什么这不起作用?

这种使用StaticLibInitializer的方法在各种编译器和平台之间是否安全且可移植?

c++ qt static-libraries static-order-fiasco

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

如何在Visual C++中创建.lib文件和.exe文件?

我目前有一个控制台项目,它创建一个.exe文件; 我希望它也创建一个.lib文件,以便编译为DLL的其他项目能够从原始项目中调用函数.

我知道这是可能的,但我找不到怎么做.如何告诉链接器还链接.lib?

c++ linker static-libraries visual-c++

13
推荐指数
3
解决办法
9850
查看次数

为什么最终二进制文件的大小会比静态库的大小小得多?

这是一个iOS问题.

我构建了一个静态库(iOS中的框架),然后将其包含在应用程序中.结果二进制(500kb)的大小小于静态库(6mb)的大小.这是如何运作的?我对静态库的理解是静态库包含在最终的二进制文件中

c build objective-c static-libraries ios

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

如何将Xcode项目转换为静态库或框架?

我有一个项目,我需要导入到其他项目作为框架,就像我们如何导入Coredata框架,Quartzcore等...如何实现?如何将我的项目编译成可以导入到其他项目的库或框架?请解释一下步骤.

提前致谢.

iphone frameworks objective-c static-libraries

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

Visual Studio 2012链接错误与静态库

我最近从2005年升级到2012年(我很确定)并在构建我的解决方案时遇到链接错误.经过几个小时的谷歌搜索和周围的搜索,我的想法用尽了.我已经建立了几十个项目,所以我很确定我已经做好了一切,但公平地说,已经有几年了.

所以,作为测试我设置了一个新项目.我称之为App,一个Windows应用程序(.exe).我创建了第二个名为Core的项目,并在其配置类型中将其标记为静态库(.lib).两者都是解决方案的一部分.在Core中,我添加了Test.cpp和Test.h,它们包含一个具有简单功能的小类.然后,在Window的应用程序WinMain.cpp文件中,我有WinMain(),我通过CTest测试调用这个测试类; 测试结果();

与此同时,我将项目App的项目依赖项设置为Core,最后将其添加到App的附加包含目录中,以及Test.cpp/.h所在的核心代码的路径.

我得到以下链接错误,并不能为我的生活找出原因.有谁知道我可能错过了什么步骤或2012年从以前的版本中发生了什么变化?非常感谢您的帮助!

1>------ Build started: Project: App, Configuration: Debug Win32 ------
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::CTest(void)" (??0CTest@@QAE@XZ) referenced in function _WinMain@16
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::~CTest(void)" (??1CTest@@QAE@XZ) referenced in function _WinMain@16
1>WinMain.obj : error LNK2019: unresolved external symbol "public: int __thiscall CTest::Result(void)" (?Result@CTest@@QAEHXZ) referenced in function _WinMain@16
1>D:\Work\Test_Linker_Stupidity\App\Debug\App.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ========
Run Code Online (Sandbox Code Playgroud)

dependencies linker-errors static-libraries lnk2019 visual-studio-2012

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

静态.lib文件中的MSVC列表符号

是否有一个命令行工具,我可以使用(或附带)Visual Studio,它将以简单易于解析的格式打印C++静态lib文件中的符号名称?

c++ static-libraries

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

XCode5 Link Testflight SDK库

我想在我的项目中使用libTestFlight.a库,我已经在"链接二进制文件库"中导入它,也在构建阶段,我试图添加" 搜索路径 "和" 标题路径 ",我也尝试更改ARCH标准架构(ARMv7的,armv7s) ,但仍没有运气,它总是给这个错误:

Undefined symbols for architecture armv7:
  "_deflate", referenced from:
      __tf_remote_log_compress_data in libTestFlight.a(tf_remote_log_io.o)
  "_deflateInit_", referenced from:
      __tf_remote_log_compress_data in libTestFlight.a(tf_remote_log_io.o)
  "_deflateEnd", referenced from:
      __tf_remote_log_compress_data in libTestFlight.a(tf_remote_log_io.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

linker static-libraries testflight xcode5

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

CLion和CMake:只构建没有可执行文件的库?

如何只用clion构建一个没有可执行文件的静态库?CMakeLists.txt如何?(没有add_executable)

更新:如果我不向Clion添加可执行文件,我有一个 错误,需要一个可执行文件.

这是我的CMakeLists.txt.

cmake static-libraries clion

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