我有这个我正在研究的MFC应用程序需要有一个嵌入式数据库.所以我去寻找一个光滑,快速的"可嵌入"数据库,并且偶然发现了SQLite.
我用它创建了一个数据库,然后用Visual Studio 2008创建了一个静态库项目.库项目将用于另一个主项目.
在库项目中,我DBClass用方法创建了一个类AddFeedToDB(CFeed f).库项目使用.libcodeproject(cppsqlite3.lib)中的文件.
编译静态库时,没有检测到错误,但是当我尝试在主项目中使用库项目文件时,我得到以下类型的错误:
error LNK2019: unresolved external symbol "public:void __thiscall
CppSQLite3DB::close(void)" (?close@CppSQLite3DB@@QAEXXZ
referenced in function "public: int __thiscall
CTalkingFeedsDB::AddFeedToDB(class CFeed,char const*)" (?
AddFeedToDB@CTalkingFeedsDB@@QAEHVCFeed@@PDB@Z
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我正在学习使用Qt Creator开发应用程序.我在Windows下构建了一个简单的应用程序,取决于使用mingwm10.dll,QtCore4.dll,QtGui4.dll,QtNetwork4.dll.在QtQui4.dll之外,我只使用了几个小部件,并且不需要所有其他的...是否可以缩小QtGui4.dll的大小或者做其他事情以减少应用程序的部署大小?静态链接怎么样?它会嵌入整个dll,还是只使用它的一部分?还有可能Qt静态地和一些动态链接一些dll吗?
我有一个静态库static_library.a
如何列出那里实现的功能和方法.或者至少如何看待"FUNCTION_NAME"实现的具体功能?
问候所有,
我有一个静态库,我稍后将其与我的应用程序链接.我的开发环境是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) 我目前有一个非常大的代码库的Xcode项目,我称之为Project X,我将其划分为一堆子项目(项目A,B,C).
到目前为止,这些项目中的每一个都可以自行编译.它们都产生静态库.项目B和项目C依赖于项目A生成的静态库以进行构建.
我有另一个xcode项目,Project Z,它需要Projects B和C生成的静态库.这就是问题所在.当Project Z进入链接器阶段时,事情就会爆发 - 在项目B和C的库中找到重复的符号,用于它们最初在项目A中链接的代码!
我对静态库世界很陌生,我不确定如何推进Project Z,或者如何修改其他项目以便它们链接到同一个Project A lib.我觉得这是不可能的.我有什么选择?
编辑:
我应该澄清,项目B和项目C需要构建成单独的静态库,因为一些客户端只需要一个或另一个.
此外,我在OSX和iOS平台上都遇到了这种困境.
我意识到我可以通过将项目构建为动态库来解决OSX上的这个问题.但是,我不想这样做,它仍然让我在iOS上遇到同样的问题.
在构建一个objective-c静态库时,我注意到.a文件(来自模拟器和iPhone的胖文件)非常大.特别是,它最初是5.7mb.我发现这篇文章并将我的构建设置设置Generate Debug Symbols为No,将lib大小减小到1.7mb.
这是一个很大的改进,但还有什么可以做的吗?实现和头文件单独占用~100kb.
当我尝试编译两个不同的程序时,我遇到了似乎是同样的问题.他们每个人首先创建一个静态库,然后创建链接该库的主应用程序.我正在使用gcc 4.7.2在Mac OS Mavericks上工作.
计划1
这是我跑步时发生的事情make:
首先,库libfeat.a已创建,但我收到警告:
ar rc ../lib/libfeat.a imgfeatures.o utils.o sift.o kdtree.o minpq.o xform.o
ranlib ../lib/libfeat.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: warning for library: ../lib/libfeat.a the table of contents is empty (no object file members in the library define global symbols)
Run Code Online (Sandbox Code Playgroud)
然后,在编译应用程序时,它表示它不能使用该库,因为它不是为相同的体系结构(x86_64)构建的:
gcc -O3 -I../include `pkg-config --cflags opencv` `pkg-config --cflags gtk+-3.0` `pkg-config --cflags gsl` siftfeat.c -o ../bin/siftfeat -L../lib -lfeat `pkg-config --libs opencv` `pkg-config --libs gtk+-3.0` `pkg-config --libs gsl`
ld: warning: ignoring file ../lib/libfeat.a, file was built for archive …Run Code Online (Sandbox Code Playgroud) 我需要在一个PHP安装有点破坏的系统上运行php脚本.而不是尝试解决问题,我想用我自己的PHP二进制文件打包我的代码(我可以执行一个可执行文件).我想要一个简单的php二进制文件,它包含我需要编译的所有模块.我的一般过程是:
./configure --enable-static --enable-cli --disable-all
Run Code Online (Sandbox Code Playgroud)
这给了我一个没有扩展名的php二进制文件.从这里我可以添加我需要的扩展.例如,添加curl和json支持
./configure --enable-static --enable-cli --disable-all --with-curl --enable-json
Run Code Online (Sandbox Code Playgroud)
这似乎普遍适用.我的脚本需要libxml支持才能与AWS交互.所以我添加--enable-libxml --enable-simplexml了configure命令.当我将二进制文件复制到远程计算机时,尝试使用看起来像这样的XML库时会出错:
/usr/lib/x86_64-linux-gnu/libxml2.so.2: version `LIBXML2_2.9.0' not found
Run Code Online (Sandbox Code Playgroud)
显然它是动态链接到libxml2.我认为这意味着虽然PHP扩展被静态编译为PHP,但PHP扩展正在使用的库不是.运行ldd确认了这一点:
$ ldd sapi/cli/php
linux-vdso.so.1 => (0x00007fff05cf3000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f3c69f82000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3c69d68000)
libcurl.so.4 => /lib64/libcurl.so.4 (0x00007f3c69afc000)
librt.so.1 => /lib64/librt.so.1 (0x00007f3c698f4000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3c695ed000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3c693e8000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f3c691cf000)
libxml2.so.2 => /lib64/libxml2.so.2 (0x00007f3c68e66000)
libz.so.1 => /lib64/libz.so.1 (0x00007f3c68c4f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3c68890000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f3c6860f000)
libidn.so.11 => /lib64/libidn.so.11 (0x00007f3c683db000)
libssh2.so.1 => /lib64/libssh2.so.1 (0x00007f3c681b1000) …Run Code Online (Sandbox Code Playgroud) 我正在进行C静态库和程序的测试设置.库代码位于我项目的子目录'foo'中,包含以下文件:
富/ foo.c的:
#include <stdio.h>
void foo(void) {
printf("something");
}
Run Code Online (Sandbox Code Playgroud)
富/ foo.h中:
#ifndef foo_h__
#define foo_h__
extern void foo(void);
#endif
Run Code Online (Sandbox Code Playgroud)
我的程序代码如下:
test.c的:
#include "foo.h"
int main() {
foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为"build"的构建脚本,其中包含以下内容:
建立:
#!/bin/bash
gcc -c -Wall -Werror foo/foo.c
ar rcs libfoo.a foo.o
gcc -static -o test test.c libfoo.a # I have also tried -L. -lfoo
Run Code Online (Sandbox Code Playgroud)
但是当我运行build时,它会给我以下错误:
test.c:1:17: fatal error: foo.h: No such file or directory
#include "foo.h"
^
Compilation terminated
Run Code Online (Sandbox Code Playgroud)
但是,当我省略#include行时,它确实有效,但我更喜欢在静态库中使用头文件.我做错了什么,我该如何解决?
构建现代框架说每个应用程序都有自己的自定义框架副本.现在,Xcode的支持iOS的框架,它仍然是真实的框架是静态库只是更方便?如果这是真的,那么为什么选择静态库模板呢?否则,一旦Swift支持静态库,我应该将所有必需的自定义框架转换为静态库吗?
static-libraries ×10
c++ ×4
gcc ×2
ios ×2
linker ×2
macos ×2
xcode ×2
.a ×1
c ×1
cmake ×1
compilation ×1
dll ×1
extraction ×1
frameworks ×1
header-files ×1
objective-c ×1
php ×1
qt ×1
swift ×1
unix ×1
unix-ar ×1
visual-c++ ×1