标签: static-libraries

你能从iPhone上的静态库中引用Xib文件吗?

在我的应用程序中,我目前将所有代码分成静态库,以便更轻松地为实际应用程序和代码的单元测试设置xcode项目目标.这个问题是我想把我的大部分xib文件放在静态库中,但似乎当我运行我的应用程序并尝试引用xib时它无法找到它,除非它包含在实际中应用程序的目标而不是静态库目标.静态库中是否可以包含xib文件和其他资源,这些文件可以被同一个库中的代码引用,如果是,如何?

iphone static-libraries xib

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

如何链接到C中的静态库?

我使用code :: blocks来编译我的静态库.输出结果是libstatic.a文件.现在,如何链接到我的库以使用已编译的函数?

(我试图使用#include"libstatic.a",但我的项目没有编译)

c compilation build static-libraries

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

Android NDK:使用预编译的静态库链接

我正在尝试将Jnetpcap移植到Android,以便将其用于解析.pcap文件.Jnetpcap是libpcap的java包装器,它使用JNI.我已经使用android的源代码树将libpcap编译为静态库.

当编译Jnetpcap作为共享库时,我遇到错误,因为我必须链接libpcap.a但我不知道怎么能告诉Android.mk他必须链接到我拥有的libpcap.a文件.

使用"LOCAL_STATIC_LIBRARIES:= libpcap"将无法正常工作,因为在android NDK中默认不提供libpcap.

如果你们中的任何人能帮助我,我会非常感激.

这是我当前的Android.mk文件:

include /home/sergio/workspace/MyApp/jni/libpcap/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := jnetpcap

LOCAL_SRC_FILES :=\
    jnetpcap.cpp\
    packet_flow.cpp\
    packet_jheader.cpp\
    jnetpcap_pcap_header.cpp\
    nio_jbuffer.cpp\
    winpcap_stat_ex.cpp\
    winpcap_send_queue.cpp\
    winpcap_ext.cpp\
    jnetpcap_ids.cpp\
    jnetpcap_dumper.cpp\
    jnetpcap_utils.cpp\
    util_in_cksum.cpp\
    jnetpcap_beta.cpp\
    nio_jmemory.cpp\
    packet_jsmall_scanner.cpp\
    packet_protocol.cpp\
    nio_jnumber.cpp\
    packet_jheader_scanner.cpp\
    library.cpp\
    packet_jscan.cpp\
    jnetpcap_pcap100.cpp\
    util_checksum.cpp\
    packet_jpacket.cpp\
    winpcap_ids.cpp\
    jnetpcap_bpf.cpp

LOCAL_C_INCLUDES := /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include /home/sergio/workspace/Shark/jni/libpcap

LOCAL_STATIC_LIBRARIES := libpcap

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

linker android static-libraries android-ndk

29
推荐指数
2
解决办法
6万
查看次数

为什么链接器链接静态库有错误?iOS版

我将混合语言框架链接到项目时遇到问题.

1)我使用Swift和Objective-C类创建框架.

2)主逻辑存储在Swift文件中.例如,带有调用NSLog的方法的类("调用Swift日志").

3)Objective-C文件有一个类,它有一个方法,我创建一个Swift类的实例并调用Swift-log方法.

4)我将此框架与我的Objective-C项目相关联,我可以在此项目中调用我需要的所有内容,但是当我想构建此项目时,我收到错误" linker command failed with exit code 1 (use -v to see invocation)"

并警告:

ld: warning: Could not find auto-linked library 'swiftFoundation'

ld: warning: Could not find auto-linked library 'swiftDarwin'

ld: warning: Could not find auto-linked library 'swiftCoreFoundation'

ld: warning: Could not find auto-linked library 'swiftCore'

ld: warning: Could not find auto-linked library 'swiftCoreGraphics'

ld: warning: Could not find auto-linked library 'swiftObjectiveC'

ld: warning: Could not find auto-linked library 'swiftDispatch'

ld: warning: Could not find …

objective-c static-libraries static-linking ios swift

29
推荐指数
12
解决办法
2万
查看次数

将共享库与静态库链接:静态库的编译方式必须与应用程序链接它的方式不同吗?

至少在Linux和Solaris上,静态库实际上只是一堆编译好的.o文件被扔进一个大文件中.编译静态库时,通常会忽略-fpic标志,因此生成的代码与位置有关.

现在说我的静态库是B.我已经构建了它并且得到了.a文件,它实际上只是所有位置相关的.o文件的全局.现在我有一个我想构建的共享库,A,我希望它静态链接B.当我构建A时,我自然会使用-fpic标志使生成的代码位置独立.但是,如果我链接B,我不是混合位置依赖和位置独立的目标文件?

除非我还指定-mimpure-text,否则我会收到很多文本重定位错误,我认为这可能是原因.看来,当我编译一个库时,我真的需要编译它3次,共享版本,静态版本和静态 - 可以使用的共享库版本.我对吗?我可以继续使用-mimpure-text,但g ++手册页说如果你这样做,对象实际上并没有最终被共享(不清楚它是否全部未被共享,或者仅仅是静态链接的部分,有人知道吗?) .

c linker shared-libraries static-libraries fpic

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

CMake和静态链接

我在一个项目中使用CMake,我正试图静态链接一些库.我已经设定:

set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
set_target_properties(icarus PROPERTIES LINK_SEARCH_END_STATIC 1)
Run Code Online (Sandbox Code Playgroud)

我确定在寻找具有*.a版本的实际库时.

目前该项目进口:

libPocoNet.a 
libPocoUtil.a 
libPocoXML.a 
libPocoFoundation.a 
libmysqlclient.a 
libmysqlpp.a 
libcrypto++.a 
CUDA
Run Code Online (Sandbox Code Playgroud)

找到所有库,并且在进行动态/共享链接时,它们工作正常.我也试过设置编译标志:

set(GCC_CXX_FLAGS ${GCC_CXX_FLAGS} "-static-libgcc -static-libstdc++ -static")
Run Code Online (Sandbox Code Playgroud)

但无济于事.虽然我在编译时没有遇到任何问题,但链接会为上面库中的调用抛出大量未定义的引用错误,即:

undefined reference to `mysql_thread_init'
undefined reference to `mysql_real_query'
undefined reference to `pthread_mutex_unlock'
undefined reference to `Poco::ErrorHandler::handle()'
Run Code Online (Sandbox Code Playgroud)

不是那个特定的顺序,每个库都有很多错误.

看看海湾合作委员会的最后一行,我看到:

/usr/bin/c++   -g -g  -static-libgcc -static-libstdc++ -static [list of *.cpp files]
-o icarus -rdynamic /usr/local/lib/libPocoFoundation.a /usr/local/lib/libPocoNet.a
/usr/local/lib/libPocoUtil.a /usr/local/lib/libPocoXML.a 
-Wl,-Bstatic -lmysqlclient -lmysqlpp -lcrypto++
Run Code Online (Sandbox Code Playgroud)

这让我想知道:

  1. 为什么Poco库链接为-rdynamic,并且没有-Wl -Bstatic标志?好像它们被跳过/排除在静态链接之外.
  2. 似乎是为静态链接设置了mysqlclient,mysqlpp和crypto ++,但我仍然遇到错误

那么,有人可以向我解释一下:

  1. 如何使用CMake设置部分静态链接
  2. CMAKE_EXE_LINKER_FLAGS是我唯一需要设置的吗?
  3. 我是否应该强制提到的库的静态链接,而不是整个项目?

如果那些问题太多或过于局部化,请原谅我,我之前没有尝试过,而且我似乎无法在网上找到太多信息.

linker gcc cmake static-libraries static-linking

28
推荐指数
2
解决办法
8万
查看次数

`-fembed-bitcode`和BITCODE_GENERATION_MODE有什么区别?

我一直在更新一个静态库来支持bitcode,从我的研究中我发现了两种实现方法:

  • fembed-bitcode在我的项目构建设置(链接)中将标志添加到其他C标志选项
  • 使用键BITCODE_GENERATION_MODE设置为bitcode(链接)添加用户定义的设置

这两个选项有什么区别吗?

我注意到的唯一区别是,通过使用fembed-bitcode,生成的iphonesimulator静态库将在启用完全bitcode的情况下构建(在我的情况下,二进制大小从5MB变为13MB,我可以检查bitcode支持使用otool),这看起来似乎不大使用它有任何不同.

objective-c static-libraries bitcode

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

为什么__attribute __((构造函数))在静态库中不起作用?

在以下示例中,程序应打印"foo called":

// foo.c
#include <stdio.h>

__attribute__((constructor)) void foo()
{
    printf("foo called\n");
}

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

如果程序是这样编译的,它可以工作:

gcc -o test main.c foo.c
Run Code Online (Sandbox Code Playgroud)

但是,如果将foo.c编译为静态库,则程序不会打印任何内容.

gcc -c main.c
gcc -c foo.c
as rcs foo.a foo.o
gcc -o test foo.a main.o
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

c attributes constructor static-libraries

27
推荐指数
2
解决办法
6887
查看次数

有没有办法确定使用哪个版本的Visual Studio来编译静态库?

我有一组静态库(.lib)文件,其中一个文件可能是使用不同版本的Visual Studio构建的.这导致链接所有这些项目的项目的代码生成失败.有没有办法确定使用哪个版本的Visual Studio来编译静态库?

static-libraries static-linking visual-studio

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

如何将Haskell编译为静态库?

嘿,我正在学习Haskell,我有兴趣用它来制作静态库,可以在Python和C中使用.经过一些谷歌搜索我发现如何让GHC输出一个共享对象,但它动态地依赖于GHC`的图书馆.在GHC中编译得到的ELF是动态依赖的,并且只依赖于C libs,并且它的大小在MB之下 - 它与GHC的libs静态链接.如何以及是否可以实现共享对象?

当前状态示例:

$ ghc --make -dynamic -shared -fPIC foo.hs -o libfoo.so
$ ldd libfoo.so
    linux-vdso.so.1 =>  (0x00007fff125ff000)
    libHSbase-4.2.0.2-ghc6.12.3.so => /usr/lib/ghc-6.12.3/base-4.2.0.2/libHSbase-4.2.0.2-ghc6.12.3.so (0x00007f7d5fcbe000)
    libHSinteger-gmp-0.2.0.1-ghc6.12.3.so => /usr/lib/ghc-6.12.3/integer-gmp-0.2.0.1/libHSinteger-gmp-0.2.0.1-ghc6.12.3.so (0x00007f7d5faac000)
    libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f7d5f816000)
    libHSghc-prim-0.2.0.0-ghc6.12.3.so => /usr/lib/ghc-6.12.3/ghc-prim-0.2.0.0/libHSghc-prim-0.2.0.0-ghc6.12.3.so (0x00007f7d5f591000)
    libHSffi-ghc6.12.3.so => /usr/lib/ghc-6.12.3/libHSffi-ghc6.12.3.so (0x00007f7d5f383000)
    libc.so.6 => /lib/libc.so.6 (0x00007f7d5f022000)
    /lib/ld-linux-x86-64.so.2 (0x00007f7d60661000)

$ ghc foo.hs
$ ldd foo
    linux-vdso.so.1 =>  (0x00007fff2d3ff000)
    libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f50014ec000)
    libm.so.6 => /lib/libm.so.6 (0x00007f5001269000)
    librt.so.1 => /lib/librt.so.1 (0x00007f5001061000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f5000e5d000)
    libc.so.6 => /lib/libc.so.6 (0x00007f5000afc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f50008df000)
    /lib/ld-linux-x86-64.so.2 …
Run Code Online (Sandbox Code Playgroud)

haskell static-libraries ghc static-linking

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