标签: bionic

什么库ld选项-lrt引用(Bionic libc)?

这个选项对ld意味着什么?

-lrt

我知道在某种程度上它意味着ld正在寻找具有实时扩展的库,但是在广泛搜索之后,我找不到这是指的确切定义(或哪个库).

使用Bionic(android)libc,android NDK文档详细说明了这个(以及pthreads)已经集成.

我问,因为它似乎是隐式的(即当我调用编译器时,直接调用自定义编译的gdc,我得到一条消息说ld找不到-lrt)

编辑

来自仿生概述

Bionic的C库附带了自己的pthread实现.这与其他历史C库不同:

- place it in an external library (-lpthread)
- play linker tricks with weak symbols at dynamic link time
Run Code Online (Sandbox Code Playgroud)

对实时功能(aka -lrt)的支持也捆绑在C库中.

问题是collect2将选项-lrt(以及-lpthreads)传递给ld.

dan@devbox:~/projects/gdc_test/jni/src$ $DC gdc_test.d -v -mthumb
Using built-in specs.
Target: arm-linux-androideabi
Configured with: /arm/ndk-git/src/build/../gcc/gcc-4.4.3/configure --prefix=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 --target=arm-linux-androideabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/arm/ndk-git/build_run/temp-install --with-mpfr=/arm/ndk-git/build_run/temp-install --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --enable-languages=c,d,c++ --enable-lto --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --enable-shared--prefix=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 --enable-initfini-array --disable-nls --prefix=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 --with-sysroot=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/sysroot --with-binutils-version=2.19 --with-mpfr-version=2.4.1 --with-gmp-version=4.2.4 --with-gcc-version=4.4.3 --with-gdb-version=6.6 --with-arch=armv5te --enable-libstdc__-v3 …
Run Code Online (Sandbox Code Playgroud)

c c++ android-ndk bionic gdc

34
推荐指数
3
解决办法
5万
查看次数

Android库中的线程安全性

我正在尝试为Android系统实现本机共享库(.so).当然,有些代码块需要是线程安全的.

我在这里发现不支持pthreads锁,互斥锁或条件变量.

我想知道图书馆级别通常使用什么来实现线程安全?

android shared-libraries thread-safety bionic android-library

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

知道嵌入式系统是使用glibc还是仿生?

例如android正在使用仿生而不是glibc,但如何弄清楚它真的是使用仿生http://en.wikipedia.org/wiki/Bionic_(software),而不是glibc?

我可以在/ proc文件系统中找到这些信息,或者是否有任何命令可以告诉bionic在当前系统中使用?

顺便说一句,嵌入式系统可能有多个c lib吗?

android glibc embedded-linux bionic

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

在x86_64 linux机器上编译gentoo-bionic

您可能知道,Bionic是Google用来运行Android应用程序的C库.有人在Linux机器上进行编译,因此可以在Android之外轻松使用.这是最近一次努力的代码,最初称为Gentoo-bionic.原始项目是基于Gentoo的,但目前的来源不是Gentoo特有的.我正在使用Ubuntu.这是代码:

https://github.com/gentoobionic/bionic

这是关于ELC2013的介绍:

我试图在X86_64 Ubuntu上编译它,但失败了.我试过了:

./autogen.sh
./configure
Run Code Online (Sandbox Code Playgroud)

我有:

configure: error: unsupported host cpu x86_64
Run Code Online (Sandbox Code Playgroud)

所以我尝试过:

./configure --build=arm-linux --target=arm-linux --host=arm-linux
Run Code Online (Sandbox Code Playgroud)

配置很好,但我得到:

$ make
make: *** No rule to make target `libc/arch-x86/include/machine/cpu-features.h',
    needed by `all-am'.  Stop.
Run Code Online (Sandbox Code Playgroud)

是否有人可以建议解决方法?

ubuntu automake android compilation bionic

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

Android libc 文档在哪里?

对于 glibc,您可以在此处找到在线文档。

我正在寻找 Android 的 libc 实现的等效文档(标头位于 sysroot/usr/include 下)。

有这些的文档吗?

(例如 sysroot/usr/include/sys/vfs.h 下的调用 statfs())。

documentation android libc bionic

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

如何在 Crashlytics Android NDK 中符号化 libart.so 或 libc.so 堆栈跟踪?

注意:符号显示在我们的 c++ 库的 crashlytics 中,问题是它们没有显示在libclibartlibbase和 等系统库中libandroid_runtime

我们有一些完全发生在 Android 运行时中的棘手崩溃,如果没有符号,这些崩溃很难调试。在 firebase crashlytics 中,我们看到以下堆栈跟踪:

Crashed: Thread :  SIGABRT  0x0000000000000000
#00 pc 0x4e574 libc.so 
#01 pc 0x4e540 libc.so 
#02 pc 0x5677d8 libart.so 
#03 pc 0x13ab0 libbase.so 
#04 pc 0x13090 libbase.so 
#05 pc 0x38cb6c libart.so 
#06 pc 0x39f7d8 libart.so 
#07 pc 0x1260e0 libandroid_runtime.so 
#08 pc 0x124ef4 libandroid_runtime.so 
#09 pc 0x124dc4 libandroid_runtime.so 
#10 pc 0x115468 libandroid_runtime.so 
Run Code Online (Sandbox Code Playgroud)

当我通过取消引用空指针来强制 C++ 库中的测试崩溃时,我在本地 Android Studio 控制台中看到以下回溯:

...snip...
      #06 pc …
Run Code Online (Sandbox Code Playgroud)

c++ android android-ndk bionic crashlytics

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

在 Ubuntu 18.04 Bionic 上安装 Postgresql(存储库已删除)

我越来越

E: The repository 'https://apt.postgresql.org/pub/repos/apt bionic-pgdg Release' no longer has a Release file.
Run Code Online (Sandbox Code Playgroud)

在 sudo apt update 上。这意味着仿生的存储库无法访问。

就我而言,这次我无法将 Ubuntu 版本升级到较新的版本,并且需要以某种方式进行管理。在这种情况下,我想我需要从 /etc/apt/sources.list.d 中删除文件,其中包含:

deb https://apt.postgresql.org/pub/repos/apt bionic-pgdg main
Run Code Online (Sandbox Code Playgroud)

那么我怎样才能在 Bionic 上安装 Postgresql呢?有什么方法可以从源代码下载并安装吗?

postgresql bionic ubuntu-18.04 postgresql-13

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

Android libc版本和malloc实现

Android平台使用什么libc实现?使用哪种malloc实现(ptmalloc或tcmalloc或其他任何东西)?

malloc android libc bionic

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

如何理解bionic.c中bionic的这段代码片段?

我在http://androidxref.com/4.0.4/xref/bionic/libc/string/bcopy.c中阅读了memcpy实现, 发现以下代码很难理解,有人可以解释一下吗?

 36 /*
 37  * sizeof(word) MUST BE A POWER OF TWO
 38  * SO THAT wmask BELOW IS ALL ONES
 39  */
 40 typedef long word;      /* "word" used for optimal copy speed */
 41 
 42 #define wsize   sizeof(word)
 43 #define wmask   (wsize - 1)
 44 
Run Code Online (Sandbox Code Playgroud)

...

        /*
 78          * Copy forward.
 79          */
 80         t = (long)src;  /* only need low bits */
 81         if ((t | (long)dst) & wmask) {
 82             /*
 83              * …
Run Code Online (Sandbox Code Playgroud)

c android bionic

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

如何在android(NDK)中缺少futimes()?

我有需要futimesfutimens功能的大型项目.不幸的是,android ndk include文件夹中的头文件中没有这样的函数.是否有解决方法(使用现有函数的存根或简单代码片段)?

futimes可以在此处找到该功能的文档.

c android android-ndk bionic

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