【问题标题】:How to compile LD_PRELOAD for most systems如何为大多数系统编译 LD_PRELOAD
【发布时间】:2012-06-12 11:24:41
【问题描述】:

我有一个 LD_PRELOAD 文件。在什么操作系统和条件下,我应该编译这个预加载以在大多数系统(Unix/Linux)上工作。最需要的是 FreeBSD、Ubuntu、CenstOS、Solaris。

谢谢!

【问题讨论】:

    标签: c++ gcc compilation g++ ld-preload


    【解决方案1】:

    你需要把它编译成一个共享库。以下是我通常的编译方式:

    libt.so: t.lo
            g++ -fPIC -O3 -W -Wall -shared -Wl,-export-dynamic -o $@ $^ -lc
    
    t.lo: t.cc
            g++ -c -fPIC -O3 -W -Wall $^ -o $@
    

    然后要使用它,在启动该文件之前将库添加到 LD_PRELOAD 环境变量。如果您从bash 命令行这样做:

    LD_PRELOAD=libt.so executable_name -and args
    

    然后,它只会为该命令行运行设置它,而不会影响您之后启动的任何其他程序。

    【讨论】:

    • 感谢您的回答,我可以给我一个完整的makefile吗,因为当我使用你的时,我发现错误***缺少分隔符。我的源文件名 - test.cpp
    • @Robert:g++ 前面需要制表符而不是空格。问候。
    • 感谢您的回答。我是否需要始终使用 libt.so 复制 t.lo,或者我只能使用 libt.so?
    • @Robert:只是.so 文件。问候。
    • 谢谢,最后一个问题:)。这个 .so 文件是否可以在 x32 和 x64 操作系统(如 Solaris、FreeBSD、Ubuntu、CentOs)上运行而无需重新编译?我可以在 Ubuntu 服务器 x64 上编译它并在上述所有系统和架构上使用编译的 .so 文件吗?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多