首页 文章
  • 3 votes
     answers
     views

    gcc -fPIC似乎捣乱了优化标志

    从这个问题开始:how-do-i-check-if-gcc-is-performing-tail-recursion-optimization,我注意到使用带有-fPIC的gcc似乎会破坏这种优化 . 我正在创建一个共享库,但我似乎不需要-fPIC选项 . 好吧,我的问题是,为什么-fPIC会改变gcc优化?我是否需要以任何理由保留-fPIC?
  • 0 votes
     answers
     views

    'gcc -lXext'成功但libXext似乎没有链接

    使用以下命令将二进制文件与gcc链接: gcc notion.o -Wl,-whole-archive ../ioncore/ioncore.a -Wl,-no-whole-archive -L/usr/X11R6/lib -lX11 -lXext -lSM -lICE -Wl,-whole-archive -L../libmainloop -lmainloop -lextl -ltu -Wl,-...
  • -1 votes
     answers
     views

    在64位开放suse linux上构建32 exe会出现链接错误

    在我的VM中,我已经安装了open suse linux 64 bit . 试图为32位构建一个exe . 但是在运行命令时: g++ prg1.cpp -o prg1 -m32 我收到以下错误: /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld:跳过不兼容的/ usr / lib64 / gcc ...
  • 30 votes
     answers
     views

    如何在gcc中将静态库链接到动态库中

    在gcc(g)下,我编译了一个静态 .a (称之为 some_static_lib.a )库 . 我想将这个 .a 文件链接(是正确的短语?)到我正在构建的另一个动态库(称为 libsomeDyn.so ) . 虽然 .so 编译,但我没有在 .so 下使用 nm 命令看到 .a 的内容: / usr / bin / g -fPIC -g -O2 -Wall -Werror -pipe -mar...
  • 8 votes
     answers
     views

    共享库构造函数未执行

    我有以下问题 . 我写了一个共享库 #include <stdio.h> #include <stdlib.h> static void __attribute__ ((constructor)) test_init(void); static void __attribute__ ((destructor)) test_clean(void); /* Initia...
  • 1 votes
     answers
     views

    gcc -nostdlib和mudflap

    我需要在另一个没有安装mudflap库并具有不同glibc版本的Linux发行版中运行我的程序 . 我试图用-static编译我的程序但是不可能: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version...
  • 8 votes
     answers
     views

    如何使用内置rpath构建和安装gcc?

    我正在尝试在/ usr / local中构建和安装我自己的gcc 4.7.2,以代替/ usr中的gcc 4.4.6 . (这是在CentOS 6.3上 . ) gcc生成可执行文件和动态库,动态链接到自己的动态库,例如: libstdc .so . 如何构建和安装gcc,以便生成的二进制文件自动获得链接器-rpath选项(-rpath / usr / local / lib64),该选项导致/...
  • 0 votes
     answers
     views

    Binary donot既不用-m32也不用64bit gcc选项

    enter code here ------------ 系统信息 使用intel-core i7处理器安装UBUNTU 13.10 代码信息 我的程序生成二进制文件:test它链接一个共享库:libtest.so libtest.so链接libc.so.6 当试图运行二进制文件 ./test 时出现以下错误: bash: ./test: cannot execute binary file ...
  • 60 votes
     answers
     views

    gcc:为什么链接数学库需要-lm标志? [重复]

    这个问题在这里已有答案: Why do you have to link the math library in C? 9个答案 我刚刚发现gcc需要 -lm 标志,以便编译一个从数学库中引用函数的程序 . 在编译包含其他库(如时间库)的程序时需要'm wondering why an explicit linking flag isn't . 如果我编写一个调用 time() 函数的程序,即...
  • 18 votes
     answers
     views

    在链接时使gcc更喜欢静态库到共享对象?

    当使用 -l 选项(例如 -lfoo )链接库时,如果找到两者,gcc将更喜欢共享对象(更喜欢 libfoo.so 到 libfoo.a ) . 有没有办法让gcc更喜欢静态库,如果两者都找到了? 我正在尝试解决的问题如下:我正在为应用程序(飞行模拟器称为X-Plane)创建一个插件,具有以下约束: 该插件将采用32位共享对象的形式,即使在64位系统上运行也是如此 运行环境没有提供一种方便...
  • 9 votes
     answers
     views

    在使用GCC编译时是否还需要使用-fPIC?

    在gcc目标机器上,当想要编译共享库时,需要指定-fpic或-fPIC来使事情正常工作 . 这是因为默认使用绝对寻址,它适用于完全控制自己的地址空间的可执行文件,但不适用于可以在可执行文件的地址空间中的任何位置加载的共享库 . 然而,现代内核现在正在实现地址空间随机化,并且许多现代架构支持PC相对寻址 . 这似乎使绝对寻址不可用(地址空间随机化)或不需要(PC相对寻址) . 我还注意到clang没...
  • 1 votes
     answers
     views

    静态链接库与较新的编译器版本兼容

    我的应用程序静态链接到几个库,如libpng,zlib,jpeglib,freetype等 . 我不使用任何IDE或构建工具,如CMake,只是makefile . 我在Linux,Android和Mac OS上使用gcc,在Windows上使用Visual C.我的目标架构是x86,x86_64,powerpc和arm . 我的应用程序和链接库是纯C,没有C. 在安装新版本的gcc或Visual...
  • 0 votes
     answers
     views

    链接GCC静态/共享库和线程以及-fPIC标志

    我正在构建一个共享库(使用一些C 11/14功能的C代码),它链接到我自己的静态库并使用线程 . 这一切都使用CMake . 当我链接我的共享库(“gscore”)并尝试链接到我的静态库(“gslicense”)时,我得到了关于pthreads中符号的错误 . 全文进一步缩小,但简短版本如下: 制作共享对象时不能使用'__pthread_key_create';用-fPIC重新编译 我已经尝试...
  • 82 votes
     answers
     views

    `-fpic`和`-fPIC` gcc参数有什么区别?

    我已经阅读了 gcc 联机帮助页,但我仍然无法理解 -fpic 和 -fPIC 之间的区别 . 有人可以用一种非常简单明了的方式解释它吗? 相关问题: What does -fPIC mean when building a shared library? What, if any, are the implications of compiling objects with gcc -...
  • 117 votes
     answers
     views

    gcc的ffast-math实际上做了什么?

    我理解gcc的 --ffast-math 标志可以大大提高浮动操作的速度,并超出IEEE标准,但我可以't seem to find information on what is really happening when it'开启 . 任何人都可以解释一些细节,并可能给出一个明确的例子,说明如果标志开启或关闭会有什么变化? 我确实尝试过挖掘S.O.对于类似的问题,但找不到任何解释ffast-m...
  • 3 votes
     answers
     views

    如何告诉ld在哪里找到libc

    所以我今天在C中创建了一个带有一些基本辅助功能的静态库 . 我用Clang 3.2(SVN快照)构建它 . 但是当我尝试运行链接到它的测试程序(prog.cpp)时,我收到以下错误: ~/Projects/CPP/AssisterLib> g++ prog.cpp -o program -static -L. -lassister /usr/lib64/gcc/x86_64-suse-lin...
  • 0 votes
     answers
     views

    创建AES C文件的共享库时链接出错[重复]

    这个问题在这里已有答案: Linking OpenSSL libraries to a program 3个答案 创建AES共享库时遇到错误 . 使用以下命令: gcc -Wall Test1.c x64 / libSESDAPI.a -fPIC -lssl -lcrypto gcc -shared -o libfile.so a.out -nostartfiles 我收到以下错误: / us...
  • 1 votes
     answers
     views

    当我创建共享库时,会发生错误

    我创建了一个共享库,如下所示: gcc -c output.c gcc -shared -fPIC -o liboutput.so output.o 当output.c如下所示,它可以工作 . //#include "output.h" #include <stdio.h> int output(const char* st) { return...
  • 2 votes
     answers
     views

    在Linux上静态和动态地链接相同的库

    我有一个共享对象/可执行文件,它静态和动态地链接到同一个库 . 库:liba.a和liba.so liba.a使用以下命令创建:ar -rv liba.a ao,包含libprint() - > print“static5”liba.so使用以下命令创建:gcc -shared -o liba.so -Wl,-h,liba.so ao ,包含libprint()打印“dynamic5”,l...
  • 25 votes
     answers
     views

    为什么在64位而非32位平台上绝对需要fPIC?

    我最近收到了: ...在创建共享对象时,不能使用“对本地符号”重定位R_X86_64_32;用-fPIC重新编译 尝试将程序编译为共享库时出错 . 现在解决这个问题并不太困难(使用-fPIC重新编译所有依赖项),但经过一些研究后发现这个问题只出现在x86-64平台上 . 在32位上,任何依赖于位置的代码仍可由动态加载程序重新定位 . 我能找到的最好的answer是: x86支持.text重定...
  • 5 votes
     answers
     views

    在Linux上编译一个共享库以定位所有发行版

    我们想要创建一个共享库(.so)来定位所有发行版,包括旧发行版 . 代码用C语言编写并使用C 11特性,因此编译器必须至少为gcc 4.7 . 我们注意到,如果我们在安装了gcc 4.7.2的Linux机器上编译我们的代码(例如,Ubuntu 12.10),那么.so 生产环境 的版本1(GNU / Linux),而在较旧的OS(例如,CentOS 5.6)上版本是“版本1(SYSV)” - 具有...
  • 3 votes
     answers
     views

    为什么在创建特定于x86_64的共享对象时“无法使用R_X86_64_32”的CMake解决方案?

    我为我的新玩具编译一些插件时遇到了这个错误(在Linux上的gcc / g上): 重命名R_X86_64_32在制作共享对象时不能使用;用-fPIC重新编译 我基本上理解why PIC is needed但是,在CMake系统中,solution seems to be this: IF (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") ...
  • 0 votes
     answers
     views

    将Python嵌入C时无法创建共享库

    我正在尝试创建一个共享库,其中包含一个C头文件和两个C源文件,其中一个调用Python文件进行实现 . 使用的编译命令是 gcc -fPIC -c -II / usr / local / include -I / usr / local / include -I / usr / local / include / python3.4m -I / usr / local / include / p...
  • 0 votes
     answers
     views

    如何用gcc 4.8.5工具链构建libcrypto.so [复制]

    这个问题在这里已有答案: relocation R_X86_64_32 against a local symbol' error 3个答案 What does .rodata and -fPIC mean when compiling OpenSSL? 1回答 /usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad va...
  • 0 votes
     answers
     views

    无法编译nasm程序

    试图编译这段代码: global main extern printf [section .data] fmtStr: db "Input string", 0xA, 0 [section .text] main: push rbp push fmtStr call printf pop rb...
  • 1 votes
     answers
     views

    麻烦在64位RHEL5上构建gcc

    天儿真好, 在64位RHEL5盒子上,我们需要安装我们的32位应用程序 . 由于某些原因,我们需要使用gcc 4.0.3,所以我尝试首先在目标机器上安装该版本,就像我在32位目标平台上做了一千次 . 然而,这一次,我遇到了问题 . 我已经引导并将gcc 4.0.3转换为路径,让我们说/ foo . 像往常一样,我将LD_LIBRARY_PATH设置为指向包含共享库的目录: $ echo $LD_L...
  • 3 votes
     answers
     views

    g在Debian,libc6上升级到gcc-4.8后链接器错误

    我刚刚升级了Debian Weezy机器,从gcc-4.7运行gcc-4.8 . 以前,构建环境是理智的,并且正在正常编译 . 现在它给出了以下链接器错误,包括任何程序(甚至是一个简单的hello世界): /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_info): relocation 0 has invali...
  • 42 votes
     answers
     views

    未找到版本“CXXABI_1.3.8”(由......要求)[重复]

    这个问题在这里已有答案: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version CXXABI_1.3.8' not found [closed] 8个答案 当我在编译后运行我的程序时,我收到以下错误: ./prog:/ usr / lib / x86_64-linux-gnu / libstdc .so.6:找不到版本CXXABI_1.3.8'(...
  • 2 votes
     answers
     views

    mips-openwrt-linux-gcc:无法识别的选项'-rpath-link'

    尝试使用toolchain-mips_gcc-4.3.3 cs_uClibc-0.9.30.1构建我的应用程序时 . 我在链接阶段遇到错误: /home/hp/Desktop/staging_dir/toolchain-mips_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/../lib/gcc/mips-openwrt-linux-uclibc/4.3.3/../.....
  • -2 votes
     answers
     views

    GCC C编译器警告“警告:控制到达......”[重复]

    这个问题在这里已有答案: What should main() return in C and C++? 18个答案 在使用“gcc -ansi -Wall -pedantic conc.c”编译时,我有以下警告,我做错了,请协助 谢谢, conc.c:在函数'main'中:conc.c:8:1:警告:控制到达非void函数的结尾[-Wreturn-type] #include <s...

热门问题