小编yos*_*ter的帖子

是否可以静态链接libstdc ++和wrap memcpy?

我正在尝试在Linux上构建满足以下条件的可执行文件:

  1. 静态链接到libstdc ++和libgcc
  2. 使用最新版本的gcc(版本> = 4.8.2)和glibc(版本> 2.14)构建
  3. 向后兼容旧版本的glibc(版本<2.5)

我当前的开发环境是CentOS 7上的gcc4.8.5,glibc 2.17.由于对memcpy的依赖,构建的二进制文件在glibc <2.14的系统上不起作用.

objdump -T main | fgrep GLIBC_2.14
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.14  memcpy
Run Code Online (Sandbox Code Playgroud)

在glibc 2.14中引入了memcpy的重大变化,所以我想强制使用旧版本.我在.so文件中遇到了这个stackoverflow post 与旧版符号版本的链接,但是由于与libstdc ++相关的链接器问题,它对我不起作用.这是我尝试下面的解决方案.

main.cpp中

#include <iostream>
#include <string.h>

int main(int argc, char** argv)
{
    char source[] = "once upon a midnight dreary...", dest[4];
    memcpy(dest, source, sizeof dest);
    std::cout << dest << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

wrap_memcpy.cpp

#include <string.h>

__asm__(".symver memcpy, memcpy@GLIBC_2.2.5");

void *__wrap_memcpy(void *dest, const void *src, size_t n)
{
    return memcpy(dest, src, …
Run Code Online (Sandbox Code Playgroud)

glibc memcpy libstdc++

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

如何从shell退出APK

我知道如何使用以下命令从shell启动APK:
adb shell am start -a android.intent.action.MAIN -n package name/activity name

有没有办法使用shell命令退出apk?谢谢!

shell android exit apk

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

标签 统计

android ×1

apk ×1

exit ×1

glibc ×1

libstdc++ ×1

memcpy ×1

shell ×1