微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从不同于预定的最终位置的地方链接共享库

假设我有一个main.lo ,我想链接库foo.so 链接器应该总是在/foo/bar/lib.so (固定path,不search)中查找foo.so ,但是我的主目录中只有lib.so ,而不是在/foo/bar/ ,这是一个受保护的目录我不能写给自己。

有没有可能像这样链接库?

编辑 :下面是使用/tmp而不是/foo/bar的简单示例。 你可以通过修改构build脚本来工作吗?

main.c中

如何最好地将CString转换为BSTR将其作为“in”parameter passing给COM方法

如何判断操作系统是Windows XP还是更高?

如何监视input到标准输出缓冲区中的内容,并在特定string存储在pipe道中时中断?

UVC扩展单元和Directshow集成

如何将固件文件存储到头文件(.h)

void foo(); int main(){ foo(); return 0; }

foo.c (多文件库被高估)

#include <stdio.h> void foo(){ puts("foo"); }

build.sh

#!/bin/sh set -x gcc -c -fPIC main.c -o main.lo gcc -c -fPIC foo.c -o foo.lo gcc -shared -o foo.so foo.lo gcc -o pwd main.lo "$PWD/foo.so" rm -f /tmp/foo.so #? Link into dest,against /tmp/foo.so but use "$PWD/foo.so" cp -a foo.so /tmp/foo.so echo pwd: ./pwd #this works echo dest: ./dest

find已经在C程序中使用过的所有库的列表(.exe)

grantha报告错误后,分享

我如何在多个监视器设置中testing我的Windows应用程序?

C#语音识别 – 识别语音和执行任务

SetTimer()陷阱

您需要两个选项才能使其工作:

首先,您需要使用-L选项来告诉链接器此刻库实际位于的位置。

然后,您需要使用-rpath 链接器选项来确定最终位置。 不幸的是,这是一个链接器特定的选项 ,这意味着您需要使用-Wl选项来使用GCC前端程序。

所以命令应该看起来像这样

$ gcc object.o files.o -o target -L/current/path/to/library -Wl,-rpath,/final/path/to/library -llibrary

请注意,这两个路径当然可以是相同的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐