标签: Gcc
shared-librariesexecutablefpic
我正在为我正在进行的一个项目整理一个生成文件。我在项目中有一个可执行文件和一个共享库。两者都使用一些相同的源文件,这些源文件被分别编译成目标文件。为了能够在共享库中使用这些对象,我需要在gcc中使用-fPIC(位置独立代码)标志。使用-fPIC编译可执行文件中使用的对象有什么影响吗?编译位置无关代码在某些平台上(最明显的是,缺少寄存器的x86体系结构,因为PIC拿走了一个寄存器,在非PIC时可以更自由地使用它),但除此之外,不应有任何有害影响
更进一步,甚至可以创建一个位置独立的可执行文件(-f
如何解除剥离对象文件的剥离
从elfutils解压的eu能为我做这个吗
我需要这个来将zImage内核转换为vmlinux,而无需重新编译
这是我剧本的一部分:
magic="1f 8b 08 00"
full_line=$(od -A d -t x1 zImage | grep "$magic" )
offset_full_line=$( echo $full_line | cut -f1 -d" ")
data_full_line=$( echo $full_line | cut -f1 -
标签: Gcc
stlg++stdstringname-mangling
我们刚刚发现我们的同事认为他可以向std::string添加一个整数,并在代码中到处使用这种操作
我们没有看到这个操作的任何编译器错误,我也不明白为什么:没有操作符+(conststring&lhs,int-rhs)。int是否自动转换为char?(使用gcc Red Hat 4.1.2和-墙壁开关编译)
而且,最重要的是,我们如何找到int添加到std::string中的所有行?当您的同事只使用整数文本时,这些将转换为字符——但是,如果整数的值太大,您将看到警告。被调用的运算符是
std::s
假设我有:
机器A上的/usr/lib/libsomething.so.1
机器B上的/usr/lib/libsomething.so.2
两台机器都有/usr/lib/libsomething。因此符号链接到各自的lib
如果我使用gcc与-lsomething(甚至/usr/lib/libsomething.so)链接,它将跟随符号链接,并且机器A上的ldd生成如下内容:
libsomething.so.1 => /usr/lib/libsomething.so.1
这意味着它将
是否有一种方法可以生成C(++)源文件的依赖项,类似于使用GCC的-MM选项,该选项仅包含所述文件的直接依赖项,即仅包含此源文件直接包含的文件
更多关于我为什么要寻找这个功能的上下文-也许有一个完全不同的解决方案来解决我的问题:我有一个通用的makefile,它可以自动检测依赖项,满足我的需要,但速度很慢。基本结构如下:
main.cpp的完整依赖项通过gcc-MM检索
存在对应的*.cpp的所有*.h依赖项都将更改为*.o依赖项
修改后的依赖项包含在makefile中
构建所有*.o目标,使
因此,我正在为处理器的GCC构建一个自定义后端。此处理器有4个地址空间:本地、全局、mmm和mmr。我希望在编写c代码时,您可以这样做:
int global x = 5;
int全局x=5;
这将导致编译器发出如下指令:
ldi.g %reg, 5
本地设计院(ldi.g%)注册,5
我知道某些处理器,比如blackfin和MeP,会做类似的事情,所以我认为这是可能的,但我不知道如何做。应该允许我这样做的技术是
关于如何执行此操作的任何建议?您可以通过使用target\u attribute\
标签: Gcc
constantsprotection
有办法保护内存的某个区域吗
我有这个结构:
#define BUFFER 4
struct
{
char s[BUFFER-1];
const char zc;
} str = {'\0'};
printf("'%s', zc=%d\n", str.s, str.zc);
它应该操作长度缓冲区-1的字符串,并保证以“\0”结尾
但编译器仅针对以下情况给出错误:
str.zc='e'; /*error */
如果:
str.s[3]='e'; /*no error */
如
标签: Gcc
Arm
inline-assemblycpu-registersregister-allocation
我想在我的C代码中编写一些内联ARM程序集。对于这段代码,我需要使用一个或两个寄存器,而不仅仅是声明为函数输入和输出的寄存器。我知道如何使用clobber列表告诉GCC我将使用一些额外的寄存器来进行计算
然而,我确信GCC在优化时可以自由地调整寄存器的用途。也就是说,我觉得使用固定寄存器进行计算是个坏主意
在不使用固定寄存器的情况下,使用既不是内联程序集的输入也不是输出的额外寄存器的最佳方法是什么
另外,我认为使用虚拟输出变量可能会达到目的,但我不确定会有什么奇怪的其他效果…好的,我找到了一个支
我正在15楼安装CUDA。我很清楚CUDA需要较旧的gcc/g++版本,我已经安装了gcc/g++4.5.1,并根据文档将其软链接。我不再收到那篇文章中提到的错误…但是,当我尝试编译SDK时,我收到以下错误:
make[1]: Entering directory `/home/whao/NVIDIA_GPU_Computing_SDK/C/src/bilateralFilter'
gcc: error trying to exec 'cc1plus': execvp: No such file
标签: Gcc
gcc-warningbrew-framework
我正在开发一个brew应用程序。在编译应用程序以获取MOD文件时,我不断遇到此错误
cc1.exe:警告被视为错误
我想禁用此警告。我在谷歌上搜索过,很多人说禁用-werror会有帮助,但我不知道怎么做。编译器是CodeSourcery ARM。您需要从CFLAGS,cppfagas等中删除-Werror。;这些通常在Makefile或构建脚本中设置
但是,我强烈建议修改实际的警告,这将产生更稳定和无错误的代码。 在终端中运行这个命令来表示,不要把警告看作是错误
make CFLAGS=&quo
我有GCC4.1.2,并且喜欢使用这个GCC编译器版本ony构建CLANG/LLVM。我需要源代码到源代码的翻译库,这样我就可以修改我现有的源代码以满足某些需求
最初,我遇到了关于usr/lib64/libstdc++.so.6的问题:在LLVM/clangmake期间找不到'GLIBCXX_3.4.9'版本。因此,在下载和构建GCC4.5.0并安装在本地路径中。我发现GCC4.5.0的libstdc++.so.6有GLIBCXX_3.4.9版本。因为我想使用GCC 4.1.2进行编译,所以我将
我在两个版本之间对g++进行隐式库路径修改时遇到了一个问题(g++-v给出了这个信息)。我将库路径设置为一个本地目录,其中有自定义库。然而,事实证明,只有一个版本的g++(我们称之为版本A)正确链接,另一个版本(版本B)链接到系统默认值,这是不需要的。显然,目录的顺序是混乱的,我的规范没有得到适当的尊重。这是一个类似于的问题,尽管这些版本没有
不知怎的,我想出了一个主意,看看两个不同版本的规范文件(通过g++-dumpspecs>specs获得)。然后,我试着看看,使用另一个版本(A)的spec
我有一个关于JNI在的一篇文章的问题
我想我对'-o libnativelib.so'和'-Wl,-soname,libnative.so'的功能还是有点困惑
“-o libnativelib.so”指定gcc的输出文件名为libnativelib.so。据我所知,它是从JAVA端加载的库名称,如本文所示:
static {
System.loadLibrary("nativelib");
}
那么'-Wl,-soname,libnative有什么用呢
我在
在构建ARM工具链时,我得到了以下错误
checking for suffix of object files... configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[1]: *** [configure-target-libgcc] Error 1
make[1]: Leaving directory `<path&
我打算交叉编译Raspberry Pi,基本上是一台小型ARM计算机。主机将是一个运行Arch Linux的i686机箱
我的第一反应是使用Arch Linux、arm elf gcc base和arm elf binutils提供的交叉编译器。然而,我读到的每一个wiki和帖子似乎都使用了一些自定义gcc构建版本。他们似乎花了大量时间来烹饪自己的gcc。问题是他们从不说为什么使用gcc比使用其他gcc更重要
stock distro提供的交叉编译器能否用于在通用内核和应用程序中构建Raspbe
如何用GCC获取C程序的抽象语法树
我正在尝试将OpenMP pragmas自动插入到输入C程序中。我需要分析嵌套for循环以找到依赖项,以便插入适当的OpenMP pragma
基本上,我想遍历和分析输入C程序的抽象语法树
我如何做到这一点 将clang与-ast print选项一起使用,这是最干净的方法。如果您绝对想使用gcc,请查看gcc的插件功能,但我认为查看clang是一个更好的选择。(顺便说一句,我看不出这是如何与Unix或Linux相关的)。
当DWARF格式包含我们需要的所有类型信息时,为什么GCC和gnuld不支持类型检查链接?我们浪费了很多时间在我们的公司上,试图让Ada和C安全通信。问题是我们没有编译器的帮助,也没有链接来确保这些绑定保持同步
当DWARF格式包含我们需要的所有类型信息时,为什么GCC和gnuld不支持类型检查链接
问题比你想象的要复杂得多
我们浪费了很多时间在我们的公司上,试图让Ada和C安全通信
然后将对此的支持编码到GNUld或gold(后者速度更快,更容易破解),并将其贡献到上游。问题解决了?涉及哪些复
标签: Gcc
binutilsubuntu-13.10
当我使用以下方法安装gcc 4.8时:
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8
我收到错误消息:
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some require
标签: Gcc
static-librariesldlibtool
我想将静态库libyaml cpp中的所有符号拉入我正在构建libLHAPDF的共享库中,以避免后者的用户显式依赖。这不是我最喜欢的方式,但安装必备软件的困难在于对软件包的定期负面反馈。因此,我尝试使用如下自动生成规则构建共享库的相关部分:
libLHAPDFInfo_la_LDFLAGS = $(AM_LDFLAGS) \
$(srcdir)/yamlcpp/yaml-cpp/libyaml-cpp.a
我特别想要这样的东西,而不是
libLHAPDFInfo_la_LDFLAGS =
标签: Gcc
osx-mavericksautotools
当我尝试在OS X 10.9.1上编译libFlac 1.0.3时,出现以下错误:
In file included from /usr/local/include/ogg/os_types.h:123:
/usr/local/include/ogg/config_types.h:6:9: error: unknown type name 'uint16_t'
typedef uint16_t ogg_uint16_t;
^
/usr/local/include/ogg/conf
标签: Gcc
g++ Arm
cross-compilingdouble-precision
以下是一幅图像,显示了同一程序在intel和ARM中的输出:
两者都显示读取二进制文件的输出,第一列中的数字为双精度浮点格式。为什么我无法在ARM环境中获得正确的结果(如intel--41784.998495、41784.998623)vs(-8.1974E+204f等)
我使用的arm处理器是:
Processor : ARM926EJ-Sid(wb) rev 0 (v5l)
BogoMIPS : 331.77
Features : swp hal
我正在使用clang 3.4.2编译以下代码
#include <stdio.h>
void haa(int& j){
j=1;
}
int main(){
printf("hello\n");
}
使用gcc编译相同的代码不会出现错误或警告。。。
有人能解释为什么会发生这样的事情吗? < P>问题是,通过引用(引用和非指针)不是C而是C++特性。p>
< >你需要用C++编译器编译代码,比如 G++< /COD>或 CLAN++。将文件扩展名改为> CPP
我刚刚安装了Yosemite,gFortran无法编译。我找到了补丁,将它复制并保存到一个.patch文件中,但我不知道在哪里应用它。以下是帮助消息中的解释:
在gcc源目录中运行此命令
补丁-p1
如果您需要VS能够提供的最严格的浮点计算,请尝试/fp:strict,尽管这可能有些过分
你可能没什么好担心的,因为默认行为应该是你想要的。只需确保未指定/fp:fast,但如果同时尝试使用/fp:fast和/fp:precise进行编译,无论如何都会出现编译错误,因此应该很容易捕获
Hans Passant提供给的链接提供了您可能需要的所有详细信息。没有一个MSVC++选项启用由g++-ffast math调用的优化。请注意,在gcc中禁用-ffast math意味着不传递该选项,这更像是“不
我正试图编译一个程序,但在运行makeinstall时出现以下错误
gcc -fPIC -O3 -g -O2 -o treeviewer -L/usr/include -lm -lpng -ljpeg -lgd treeviewer.o tree.o fileio.o tree.o:
In function `drawImage':
/home/localadmin/codehop-dev/i-codehop/treeviewer/tree.c:587: undefined reference
我知道还有一些类似的问题,不管是不是StackOverflow。我为此做了很多研究,但仍然没有找到一个解决方案。
我正在做一个操作系统作为辅助项目。我一直在做汇编,但现在我想加入C代码。
为了进行测试,我创建了以下程序集代码文件(称为test.asm):
然后我制作了这个C文件(称为main.C):
为了链接,我使用了这个文件(称为make.bat):
我已经研究很久了,我仍然在努力寻找答案。我希望这不会被标记为重复。我承认存在类似的问题,但都有不同的答案,没有一个适合我
问题:我做错了什么?旧
标签: Gcc
cross-compilinggnu-assemblertoolchain
我目前正在为我所在大学开发的处理器开发工具链。处理器紧密基于(orpsocv2已被用作基线)。为该平台构建程序需要在二进制文件中添加一些自定义指令。我已经实现了相应地修改汇编代码的工具(使用正则表达式)。然而,我正在寻找一种方法来将它与
常规工具链由以下工具组成:
预处理器->编译器->汇编程序->链接器
我需要在编译之后(因为我需要有关二进制文件中出现的基本块的信息)和链接之前(因为在尝试更改地址之后,事情会变得一团糟),将我的修改集成到某个地方
现在我的问题是:有没有一种简单的方法可以在GN
几个星期以来,我一直在使用一款新的Mac电脑,它与OS X Yosemite(10.10.3版)一起工作。我发现从源代码安装程序有很多问题,为什么我已经将编译器改为GCC4.2、4.7和4.9。此外,我“删除”了与clang的连接,但这也会在编译过程中产生错误。但是,在MacOSX机器版本10.7.5上执行同样的操作也可以。在那里,gcc版本4.2.1正在运行
下面是一条示例错误消息,我在命令行中键入make:
cc -O2 -c -o swat.o swat.c
In file inclu
将DJGPP与编译器gpp和英特尔语法一起使用
如何将变量传递到内联程序集中?
错误如下:
对'n'的未定义引用
代码:
void geninterrupt (int n) {
asm("mov al, byte ptr [_n]");
asm("mov byte ptr [genint+1], al");
asm("jmp genint");
asm("genint:");
asm("int 0");
}
djgpp将
使用RHEL6,内核版本2.6.32-573.3.1.el6.x86\u 64.
配置并使成功无误。但是,在制作安装过程中:
gcc -c -g -O2 -gnatpg -gnatwns -W -Wall -nostdinc -I- -I. -Iada/generated
-Iada -I../../gcc-5.2.0/gcc/ada -I../../gcc-5.2.0/gcc/ada/gcc-interface
../../gcc-5.2.0/gcc/ada/gnat1drv.adb -o
我把学习汇编语言作为一种爱好,经常使用gcc-S生成汇编输出。这非常简单,但我无法编译程序集输出。我只是好奇这是否能做到。我尝试使用标准汇编输出和英特尔语法,使用-masm=intel。两者都不能用nasm编译,也不能用ld链接
因此,我想问一下,是否有可能生成汇编代码,然后进行编译
更准确地说,我使用了下面的C代码
>> cat csimp.c
int main (void){
int i,j;
for(i=1;i<21;i++)
j= i + 100
我是汇编语言编程新手。我试图按照概述的步骤来更好地理解组装和优化。我的操作系统是LinuxMint,我正在尝试使用NASM汇编程序,尽管没有成功
与演练中一样,代码是:
BITS 32
GLOBAL main
SECTION .text
main:
mov eax, 42
ret
它使用以下命令使用nasm成功编译:nasm-f elf tiny.asm
但是如果我尝试使用gcc链接命令:gcc-Wall-s tiny.o
我得到以下错误:
/输入文件'tiny.o'的usr/
根据GCC文档,-MM标志将以这种方式生成依赖项:
类似于-M,但不要提及在系统中找到的头文件
头目录,也不是直接或间接包含的头文件
间接地,从这样的标题
我刚刚发现在我的项目中使用-MM标志时,不仅会抑制对系统头的依赖性,还会抑制对本地安装在主目录中的第三方库头的依赖性。摆脱系统头依赖通常对我来说很方便(因为我不编辑它们),但是我有时编辑/自定义第三方库,当然,在编辑之后我需要重新生成代码
所以,我的问题是什么是GCC的“系统头”?假设您在主目录中安装了自定义版本的libpng,并对其进行编辑
在raspbian上组装以下行时:STMFDGT R0,{R1,R2,R3}
Error: bad instruction `stmfdgt r0,{r1,r2,r3}'
为什么不承认这种法律记忆法?
没有条件部分,一切正常
版本如下:
GNU汇编程序(用于Raspbian的GNU Binutils)2.25
版权所有(C)2014免费软件基金会。
这个程序是自由软件;您可以根据
GNU通用公共许可证版本3或更高版本。
这个计划绝对没有保证。
此汇编程序是为“arm linux gnueabi
当我进入调试程序时,它说它找不到crt/crt\u c.c文件。我下载了GCC6.3.0的源代码,但crt_c.c在哪里
还有,我如何在那里找到printf和rand的源代码?我想在调试器中逐步完成它们
Ide是代码块,如果这很重要的话
编辑:我之所以这样做是因为我试图减小可执行文件的大小。直接进入独立式会给我留下很多缺失的功能,所以我打算逐一研究并替换它们。我正试图这样做,使我的程序更小更快,并且能够更轻松地研究汇编输出
还有,忘了提一下,我在windows上,msys2。但答案仍然有用
如何
首先,我应该说,在gcc和makefiles方面,我是个新手
在我最近开始使用的Ubuntu机器上,我发现在运行gcc时,我放置源文件和库/头的顺序会有所不同。在另一台机器上,我可以:
gcc -I../include -L../lib myProgram.c -o myProgram
但在新机器上,这不会链接库,我必须:
gcc myProgram.c -o myProgram -I../include -L../lib
现在,我有了以下makefile:
SHELL = /bin/sh
全部成交
我有一个用libtool构建的库。我有一个额外的模块,它是使用Makefile而不是libtool构建的。我希望能够将此库对象与libtool构建的库对象一起使用。由于我不想将附加模块与libtool集成,因此我只想在以下行中扩展libtool生成的Makefile:
all: all-am
(取而代之的是:)
谢谢
如何在Makefile.am中执行此操作?大家好,知道如何解决我的问题吗?我可以问一下为什么不libtool,即使没有其他Autotool的支持,也可以消除许多依赖于平
我的Linux发行版将我的GCC版本升级到了5.5.0(如果我知道原因的话,那就糟了)。现在,当我尝试构建包含avx512fintrin.h的代码时,我遇到了一系列编译器错误:
/usr/lib/gcc/x86_64-linux-gnu/5/include/avx512fintrin.h(9220): error: argument of type "const void *" is incompatible with parameter of type "const float *"
/usr
我想编译我的c代码(在内核中),它需要包含来自另一个目录的一些头文件
我希望在Makefile中指定include路径,而不是在c文件中指定头文件的完整路径
启用配置选项config\u FEATURE\u X时,我的c文件将被编译。
我在Makefile中编写了以下内容:
obj-$(CONFIG_FEATURE_X) += my_file.o
ccflags-$(CONFIG_FEATURE_X) += -I$(obj)/../../path
当使用make menuconfig在.CO
标签: Gcc
Linker
static-librariesundefined-symbol
最近我发现Linux链接器不会因为静态库中未定义的符号而失败,但是如果我直接与te对象文件链接,会因为相同的未定义符号而失败。下面是一个简单的例子:
源代码:
$ cat main.c
int main() { return 0; }
$ cat src.c
int outerUnusedFunc() {
return innerUndefinedFunc();
}
int innerUndefinedFunc();
从中创建*.o和*.a,使用“nm”进行比较:
(这里我们清楚地看
我只想测试-pg,源文件很简单,我的环境很好
赛文
$ uname -a
CYGWIN_NT-10.0 SHA-LPLATOW 2.8.2(0.313/5/3) 2017-07-12 10:58 x86_64 Cygwin
$ vi pgtest.c
#include <stdio.h>
void main(void){
printf("hello, world\n");
}
但是-pg报告错误
$ gcc -pg -c pgtest.c
$ gcc
标签: Gcc
cross-compilingmeson-build
我正在为我的覆盆子pi4编译mesa3d。但是我在运行介子构建时遇到了一些错误
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: f41392cec8f12086b93952027a77c114
COMPILER_PATH=/usr/libexec/gcc/aarch64-linux-gnu/9/:/usr/libexec/gcc/aar
守则:
// test.c
#include <stdint.h>
typedef struct cgi
{
const char *cgi_name;
void *data;
uint32_t flags;
} cgi_t;
static cgi_t a, b, c;
雷德尔夫
$ readelf -a test.o
5: 0000000000000000 24 OBJECT LOCAL DEFAULT
过程导向信号:过程导向信号是针对整个过程(因此等待)的信号。进程定向的信号可以传送到当前未阻止该信号的任何一个线程。如果多个线程解除了信号阻塞,那么内核将选择一个任意线程向其发送信号
线程定向信号:线程定向信号是针对特定线程的信号。该集合将由挂起的进程定向信号集合和调用线程挂起的信号集合的并集组成
异步和同步信号处理
您可以将程序配置为告诉如何处理信号。您可以忽略它们(很少可以忽略),注册一个信号处理程序,该处理程序将在接收到特定信号时被调用(异步(/code>),或者阻止它以稍后处理(同步
我刚刚用crosstool ng为“arm未知eabi”创建了一个gcc11交叉编译器来编译我的内核(android用于msm8974芯片组),但在链接的某个点上,LD给出了关于eabi版本的错误,但目标文件甚至不存在。
以下是crosstool工具链的组件:
比努蒂尔斯-2.34.tar.xz
gcc-git-46a58c77.tar.bz2
gettext-0.20.1.tar.xz
gmp-6.2.0.tar.xz
isl-0.22.tar.xz
libiconv-1.16.tar.gz
我在从源代码处编译GCC4.3.3时遇到这个错误,我找不到解决这个问题的方法。我使用的是64位Ubuntu。我还尝试用gcc和g++编译简单的源文件,它们正在工作
checking for C compiler default output file name... configure: error: C compiler cannot create executables
这是你的电话号码
有人知道如何解决这个问题吗?4.3.3的configure太旧了。它试图使用过时的编译器标志,如现代g
嗯,我觉得我的问题有点有趣,我想了解我的Ubuntu盒子里发生了什么
我编译并链接了以下无用的代码:
/*File useless.c*/
#include <stdio.h>
#include <math.h>
int main()
{
int sample = (int)(0.75 * 32768.0 * sin(2 * 3.14 * 440 * ((float) 1/44100)));
return(0);
}
然后停下来。发生了什么事?为什么我不
我一直在追踪一个相当复杂的产品中的一些链接器错误,我运行它的结果非常疯狂。下面是一个非常简单的例子,展示了与我有关的行为。我试图理解这种行为。如果行为的改变是有意的,是否可以追溯到gcc变更日志,以便我将来可以依赖它
这确实是一个链接排序问题,而且不同版本的链接器的行为方式似乎不同
第一个共享库(libtest1.so):
第二个共享库(libtest2.so):
当我构建共享库时,我不会使一个库依赖于另一个库。我将在test1中保留未解析的符号,然后在编译main时将test1和test2都放
我正在学习使用GCC工具链编写ARM代码。我遇到了一些我找不到文档的GCC选项。有人能解释一下他们是干什么的吗
-specs=nosys.specs
-specs=nano.specs
-specs=rdimon.specs
-lnosys
-specs=nosys.specs和-lnosys有什么关系?你是一起使用它们,还是它们彼此排斥,还是其他什么
还有nano,我想暗示一下使用newlib nano库。我见过它与-lm和-lc一起使用。这是否只是提供了标准的libc和libm函数
rd
你好,你在帮助别人
尝试在Octave中执行命令pkg install-forge io statistics control struct optim以安装统计数据包时,我遇到以下错误:
>> pkg install -forge io statistics control struct optim
warning: LFLAGS is deprecated and will be removed in a future version of
Octave, use LDFLAG
1 2 3 4 5 6 ...
下一页 最后一页 共 99 页