草庐IT

linux - GCC 选项的 -shared 和 -Wl,-shared 的区别

我知道-Wl,-shared是ld的一个选项。我见过有人这样编译,$gcc-shared-Wl,-soname,libtest.so-olibtest.so*.o还有这样的人$gcc-Wl,-shared-Wl,-soname,libtest.so-olibtest.so*.o所以,我想知道-shared和-Wl,-shared之间是否有区别。谢谢。 最佳答案 将-shared传递给gcc或将-shared传递给ld(通过-Wl).将-shared传递给GCC可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的crt*文件。要获

linux - GCC 选项的 -shared 和 -Wl,-shared 的区别

我知道-Wl,-shared是ld的一个选项。我见过有人这样编译,$gcc-shared-Wl,-soname,libtest.so-olibtest.so*.o还有这样的人$gcc-Wl,-shared-Wl,-soname,libtest.so-olibtest.so*.o所以,我想知道-shared和-Wl,-shared之间是否有区别。谢谢。 最佳答案 将-shared传递给gcc或将-shared传递给ld(通过-Wl).将-shared传递给GCC可能会在链接时启用或禁用其他标志。特别是,可能涉及不同的crt*文件。要获

linux - 在没有c编译器的linux上安装gcc

如何在没有任何c编译器的系统上安装gcc?该系统是基于linux的防火墙,没有任何c编译器。 最佳答案 我猜你有一个运行Linux和shell访问的设备,但既没有安装包管理器也没有安装编译器。因此,您需要交叉编译gcc和整个工具链(至少是binutils)——这很简单,因为gcc、binutils、gdb等的./configure脚本支持交叉编译-使用--target=选项进行编译。所以你所要做的就是找出目标架构(uname帮助)然后下载,在linux主机上解压gcc源并运行./configure--target=$YOUR_TAR

linux - 在没有c编译器的linux上安装gcc

如何在没有任何c编译器的系统上安装gcc?该系统是基于linux的防火墙,没有任何c编译器。 最佳答案 我猜你有一个运行Linux和shell访问的设备,但既没有安装包管理器也没有安装编译器。因此,您需要交叉编译gcc和整个工具链(至少是binutils)——这很简单,因为gcc、binutils、gdb等的./configure脚本支持交叉编译-使用--target=选项进行编译。所以你所要做的就是找出目标架构(uname帮助)然后下载,在linux主机上解压gcc源并运行./configure--target=$YOUR_TAR

linux - gcc: 找不到/usr/local/lib 中的链接库,但是/etc/ld/so.conf.d/libc.conf 列出了它?

我遇到了共享库和gcc的问题。起初我无法运行我编译的程序,因为我收到以下错误:加载共享库时出现gcc错误。查了一下,发现是共享库找不到​​。但是我已经确定共享库位于/usr/local/lib中,AFAICT是共享库的常用目录,应该从一开始就可以使用。我读到您可以设置LD_LIBRARY_PATH,这对我有用。但是,我不希望每次运行我的程序时都设置它。进一步搜索建议编辑ld.so.conf。当我查看它时,它具有以下内容:include/etc/ld.so.conf.d/*.conf查看ld.so.conf.d目录显示了一系列文件,包括libc.conf。该文件中包含以下内容:/usr/

linux - gcc: 找不到/usr/local/lib 中的链接库,但是/etc/ld/so.conf.d/libc.conf 列出了它?

我遇到了共享库和gcc的问题。起初我无法运行我编译的程序,因为我收到以下错误:加载共享库时出现gcc错误。查了一下,发现是共享库找不到​​。但是我已经确定共享库位于/usr/local/lib中,AFAICT是共享库的常用目录,应该从一开始就可以使用。我读到您可以设置LD_LIBRARY_PATH,这对我有用。但是,我不希望每次运行我的程序时都设置它。进一步搜索建议编辑ld.so.conf。当我查看它时,它具有以下内容:include/etc/ld.so.conf.d/*.conf查看ld.so.conf.d目录显示了一系列文件,包括libc.conf。该文件中包含以下内容:/usr/

linux - 在 Linux 上使用 gcc 进行增量链接。可能吗?

我团队项目的开发方式是,我们从所有.o对象文件中为我们的应用程序生成一个共享对象库。我的任务(希望它足够具体但也足够通用以供其他人使用!)是仅链接自上次创建可执行文件以来已更改的目标文件。例如,这是我用来构建.so的命令行:g++34-shared-rdynamic-m64-Wl,-rpath,'$ORIGIN'MyObject1.oMyObject2.oMyObject3.oMyObject4.o-olibMySharedLibrary.so按预期工作!:)我的目标是从现在开始只能链接更改的目标文件,以加快并发链接过程。一个示例命令是:g++34-shared-rdynamic-m6

linux - 在 Linux 上使用 gcc 进行增量链接。可能吗?

我团队项目的开发方式是,我们从所有.o对象文件中为我们的应用程序生成一个共享对象库。我的任务(希望它足够具体但也足够通用以供其他人使用!)是仅链接自上次创建可执行文件以来已更改的目标文件。例如,这是我用来构建.so的命令行:g++34-shared-rdynamic-m64-Wl,-rpath,'$ORIGIN'MyObject1.oMyObject2.oMyObject3.oMyObject4.o-olibMySharedLibrary.so按预期工作!:)我的目标是从现在开始只能链接更改的目标文件,以加快并发链接过程。一个示例命令是:g++34-shared-rdynamic-m6

c - 与 gcc 静态链接时如何只包含使用过的符号?

我正在部署一个用gcc4.3.2-1.1(Debian)编译的小程序。该程序将部署在从Debain5到前沿的Fedora、Ubuntu、Slackware、Arch等虚拟机模板上。该程序依赖于Xen库中的一些符号,这些符号仅在不稳定的树中可用。因此,通过虚拟机模板上的相应包管理器安装Xen的库并不能解决我眼前的问题。在打包我自己的这些库版本之前,我需要静态链接可执行文件。默认情况下,gcc4.3-x是否只包含静态链接时实际使用的符号,或者是否有另一个我应该传递给链接器的优化标志?我知道静态链接不好,我这样做只是为了临时解决问题。 最佳答案

c - 与 gcc 静态链接时如何只包含使用过的符号?

我正在部署一个用gcc4.3.2-1.1(Debian)编译的小程序。该程序将部署在从Debain5到前沿的Fedora、Ubuntu、Slackware、Arch等虚拟机模板上。该程序依赖于Xen库中的一些符号,这些符号仅在不稳定的树中可用。因此,通过虚拟机模板上的相应包管理器安装Xen的库并不能解决我眼前的问题。在打包我自己的这些库版本之前,我需要静态链接可执行文件。默认情况下,gcc4.3-x是否只包含静态链接时实际使用的符号,或者是否有另一个我应该传递给链接器的优化标志?我知道静态链接不好,我这样做只是为了临时解决问题。 最佳答案