标签: Linker
undefinedsymbolsturbo-c++
我正在TurboC上尝试以下程序。我得到一个函数原型的链接器错误。
错误是:模块student.cpp中未定义的符号checkbranch(char near*)其中student.cpp是文件名。
代码编译时没有错误,我无法在这里检测到错误。任何帮助都将不胜感激
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iomanip.h>
#include<fstrea
关于-b选项的Luajit手册上说:
从输出文件名的扩展名自动检测输出文件类型:
c-c源文件,导出字节码数据
h-C头文件,静态字节码数据
obj或o对象文件,导出字节码数据(特定于操作系统和体系结构)
原始或任何其他扩展名-原始字节码文件(可移植)
将其编译为对象文件意味着什么?我知道它产生一个文件,它可以与C或C++代码生成的其他对象文件链接。p>
但是这是如何工作的呢?如何使用从其他C代码生成的对象文件?在哪种情况下,您会这样做?它将模块的字节码嵌入到常量数组中
如果随后从可执行文件
我正在从事一个混合使用Fortran 90和Fortran 77编写的项目,现在需要将LAPACK/BLAS库从netlib.org链接到该项目,所有这些都在Linux环境中。我在给定的Makefile中使用了gfortran编译器标志OPTS=-O2-fPIC-m64,然后使用
make blaslib
make
它正常地结束了,或者至少我认为是这样
然后,我复制了/usr/local/lib和/usr/local/bin/和/usr/local/lib64/
但它不起作用。我甚至使用了选项
我想在给定的节中声明一个数组异常表static uint32 excp[6]。由链接器文件定义的LOW_异常。我怎样才能在C语言中做到这一点
请记住,只有此数组才能在.LOW_异常部分中累积
thnx\uuuuuu属性\uuuuu节。低\u异常通过读取?特别是关于。
我正在尝试编写一个可执行文件,其中.text部分位于特定位置。我编写了以下链接器脚本:
base_address = 0x123456789AB;
SECTIONS
{
ENTRY(_start)
. = base_address;
.text : { *(.text); }
}
但是,当我查看生成的可执行文件的内存映射时,我看到:
12345600000-12345679000 r-xp 00000000 08:01 1 /path/to/executable
很明
标签: Linker
linker-errorslnk2005
我有一种情况,我必须链接两个对象文件(我没有源代码),不幸的是,它们重复定义了符号。我想知道是否有一个合理的方法来避免这个问题
年,有人建议使用/FORCE来产生输出,但也有人提到,使用/FORCE意味着人们无法控制情况。不仅要使用哪些符号未定义,还意味着无意中重复的符号将以静默方式传递(这可能是错误)
我想告诉链接器,我知道foo在bar.obj和baz.obj中都有定义,它应该忽略baz.obj中的定义。这样,如果我在代码库中的两个位置定义qux,或者即使我碰巧在其他一些对象文件中定义了fo
BDB是在同一台PC上,在同一个VS
#包括
int main(){
Db(NULL,0);
返回0;
}
1> main.obj:错误LNK2001:未解析的外部符号“public:virtual u thiscall Db::~Db(void)”(??1Db@@UAE@XZ)"
1> main.obj:错误LNK2001:未解析的外部符号“public:u thiscall Db::Db(类DbEnv*,unsigned int)”(??0Db@@QAE@PAVDbEnv@@I@Z)"
有什
几个小时以来,我一直在尝试在Linux上自动工作的方法,现在是在Windows上。我想链接一个程序,但对于这个问题,只有下面列出的带有ffmpeg的简短示例ffmpeg程序
安装程序
目前我在Linux上,使用mingw编译并使用。目录设置如下所示:
dumpVideoInfo.c
+ bin
avformat-54.dll
avutil-51.dll
+ lib
avcodec.lib
avcodec.dll.a
avutil.lib
avutil.dll.a
问题
在Solaris中,我链接了以下内容(使用Sun Studio;在引擎盖下使用Solaris链接器,而不是GNU):
。。。它将最终的二进制文件链接得很好
当我尝试在Linux中使用GNUld(再次使用Sun Studio作为编译器驱动程序)执行此操作时,共享对象链接正常,但是somebinary无法链接,因为它找不到libmylib1.so
当我在strace中运行第3行时,它试图打开一个文件,该文件的路径中包含文本(未扩展)字符串$ORIGIN
我遇到了许多其他与这个话题有关的问题。我看到的
标签: Linker
gfortranrcpparmadillo
请运行以下命令:
edd@max:~$ dpkg -l | grep libgfortran | cut -c-75
ii libgfortran-4.7-dev:amd64 4.7.3-7ubuntu3
ii libgfortran-4.8-dev:amd64 4.8.1-10ubuntu9
ii libgfortran3:amd64
什么是ELF头?谁能详细解释一下它是如何工作的,为什么需要它?我找不到任何好的资源来提供清晰的解释。ELF头位于可执行文件的开头
我正在尝试为消息传递接口创建语言绑定,但编译器无法识别我对C函数的引用
我目前正在linux机器上使用gfortran作为编译器。。。我知道语言绑定可以工作,但每当我尝试将它们链接到mpi库时,就会出现以下错误:
/tmp/ccwukrNT.o: In function `MAIN__':
hello_init.f90:(.text+0x17): undefined reference to `mpi_init'
collect2: error: ld returned
当我试图编译一个小lua程序时,我会遇到以下错误:
/usr/lib//liblua52.so: undefined reference to `dlsym'
/usr/lib//liblua52.so: undefined reference to `dlerror'
/usr/lib//liblua52.so: undefined reference to `dlopen'
/usr/lib//liblua52.so: undefined reference to `dlclose'
当然
请不要看错题目,我知道它们是什么(可移植可执行文件的格式)。但我的兴趣范围略有不同
我的困惑
我参与重新托管/重新定位最初来自第三方的应用程序。问题是,有时目标代码的格式也是.elf、.COFF格式,并且仍然表示“可执行和可链接”
我主要是一个Windows用户,我知道当编译和组装C/C++代码时,会得到类似于.o或.obj的东西。这是不可执行的(好吧,我从来没有尝试过执行它们)。但是,当您完成链接静态库和动态库并完成构建时,将显示可执行文件。我的理解是,如果有必要,您可以继续使用某种形式的脚本
我试图在Mac上编译cgminer,但编译无法完成,引用“ld:library not found for-lrt”
精确终端输出:
CCLD cgminer
ld: library not found for -lrt
collect2: ld returned 1 exit status
make[1]: *** [cgminer] Error 1
make: *** [install-recursive] Error 1
有没有关于如何通过命令行安装链接器库的解决方案?lib
gcc-o clxd-m64-L/usr/local/lib64-L/usr/lib64-L/usr/lib64/nptl
-Wl,-rpath,/home/y/lib64-ldl-lrt-lpthread-lstdc++-lgcc-lc-lm-lev-L/home/y/lib64-Wl,-Bstatic-lboost\u程序选项-lboost\u日期\u时间-lboost\u文件系统-lboost\u regex-lboost\u系统-lboost\u线程-llua-lcrypto-Wl,--
已解决。请参阅下面的解决方案部分。
我遇到了一个问题,我的构建环境输出了一个大的二进制文件,我希望有人能帮助我重新开始
我正在使用STM32F105处理器、Eclipse、FreeRTOS和CodeSourcery编译器来尝试在这个设备上运行一些AHRS评估代码。我有很多代码在运行,但在实现eval代码中使用malloc分配内存的部分时遇到了问题。我不得不为sbrk添加一些代码来编译它,现在我的二进制代码从35K增加到了近400MB。我认为这是一个链接器问题,因为.out文件(在objcopy之
我们如何知道系统正在使用哪种类型的链接器(静态/动态)
这取决于我们使用的库的类型(静态/动态),还是有其他东西?您是项目的主人。因此,当您使用编译器链接器选项创建和设置构建配置时,需要为代码创建宏定义,并使用其他选项将其传递给编译器。使用此宏可识别代码中库的类型
编译器命令:
gcc -D LINK_STATIC a.cpp ...
守则:
#ifdef LINK_STATIC
... static implementation ...
#end
#ifdef LINK_DINAMIC
标签: Linker
static-librarieslinker-errorssymbolsld
我正在尝试从FlightGear项目构建TerraGear,它需要链接时从静态库libSimGearBucket中获得多个符号,例如SGBucket::gen_base_pathld在以下情况下失败
警告:未定义对»SGBucket::gen_base_path[abi:cxx11]()常量的引用
这些在库中定义:
$nm libSimGearCore.a | grep gen_base_路径
0000000000000 1F0吨锌K8SGBucket13Gen_基地
ZNK8SGBucket
我试图在centos上编译svg2pdf。我想我已经成功地使用yum安装了所需的依赖项:
sudo yum install librsvg2
sudo yum install cairo
生成文件包含:
MYCFLAGS=`pkg-config --cflags librsvg-2.0 cairo-pdf` -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -
Wneste
我有一个在头文件中定义的设备函数。它出现在头文件中的原因是,它被全局内核使用,因为它是一个模板内核,所以需要出现在头文件中
当此头文件包含在2个或多个.cu文件中时,我在链接过程中遇到LNK2005错误:
FooDevice.cu.obj:错误LNK2005:“int”
__cdecl getCurThreadIdx(void)“(?getCurThreadIdx@@YAHXZ)已定义
在Main.cu.obj中
为什么会出现这种错误?如何修复它
以下是产生上述错误的示例代码:
FooDevic
我想缩小可能出现瓶颈的地方?建立我的项目甚至需要半个小时。我知道很多技巧和事情在理论上可能是有罪的,然而剖析器将是我所有问题的完整解决方案
我问的是C++ + GNU-GCC—SUB-Linux环境下的PrPrRead,但是我很好奇,如果有流行的语言有这样的事情。 < GCC】你可以使用这个选项来获得每个编译阶段所花费的时间。
由于ld中的错误,我需要从一个对象文件复制一个ELF部分
另一个。我可以将所需的部分转储到文件中,但问题仍然存在
objcopys'--add section'选项需要一个二进制文件和
因此,节类型信息将丢失。据我所知
我无法使用binutils设置节的类型,但我希望
我错了:)
我可以手动编辑二进制文件来设置节类型和
解决了潜在的问题,但我很好奇是否有
基于标准工具的解决方案
对于好奇的人来说,根本的问题是当GNULD链接
没有.ARM.attributes部分的ARM对象文件(例如文件
只有
我在大多数视图中成功地使用了Mvx.MvxFrameControl。其中一个视图使用从头构建的自定义控件。仅在发布模式下,当膨胀此视图时,应用程序崩溃
日志显示某个方法已被优化并丢失
at <unknown> <0xffffffff>
at (wrapper managed-to-native) object.wrapper_native_...
at Android.Runtime.JNIEnv.CallObjectMethod (intptr,intptr,Andro
我跟着,一切都按描述进行
不过,指南中的第10步让我感到困惑
我之前创建了一个gtest的归档文件,并将其命名为libgtest.a。
导游明确地告诉我要参加gtest而不是libgtest
我想知道为什么这是真的,因为在其他任何地方我都没有提到libgtest.a。
MIWW C++链接器如何知道要使用什么文件?
该目录包含名称中包含gtest的其他文件。这是一种常见的GCC约定-当您传递-lname链接器时,链接器会自动搜索libname.a。请参阅和-l选项
IBM J9 JVM 1.6(超过1.5)中的某些更改会导致我们遇到的链接错误,从而导致运行时异常。具体来说,我们使用JNI加载一个共享库,该库包含以下代码的对象文件:
extern _edata;
extern _etext;
extern _end;
这些是内存子系统中使用的地址,应该由链接器提供。但是,当我们编译共享库时,AIX链接器没有链接它们(但是,如果您创建了一个可执行文件,它会正确链接)
JNI错误消息:
java.lang.UnsatisfiedLinkError: oas-j
标签: Linker
shared-librarieself
给定一个ELF二进制或共享对象,我如何才能最容易地看到所需共享库的加载顺序
它们是否按照readelf-d列出的顺序加载
如何才能最容易地查看所需共享库的加载顺序
使用LD\u调试:
LD_DEBUG=files /bin/ls
13444:
13444: file=libc.so.6 [0]; needed by who [0]
...
13444: file=libnss_files.so.2 [0]; needed by who [0]
...
有关更多信息,请访问m
标签: Linker
binaryfilesldbinutilsmemory-layout
这个问题源自
从注意到的问题中,我了解到内存映射中提到的用于构建可执行文件的地址是指虚拟地址,而不是物理地址
我一直在使用这两个在线资源阅读可执行文件的内存布局:
两者都意味着可执行文件的“开始”是其文本段。如果这是真的,并且可执行文件的内存映射指的是虚拟地址,为什么我的内存映射中的文本段不指的是0x0?我的理解是,当加载一个可执行文件时,操作系统会给它一个虚拟地址范围——从0x00开始。那么什么占据了虚拟地址范围0x00-0x3FFFFF
什么是/如何确定可执行文件的虚拟地址范围的结束地址
标签: Linker
linker-scriptsincremental-compilerincremental-linking
这里是上下文:我与微控制器一起工作,在微控制器中,生成的二进制文件被写入内部闪存,并从那里执行。闪存被擦除并以4KB块写入。闪光器足够智能,可以跳过不需要更改的块
在开发过程中,典型的做法是每天进行几十次小更改、重新编译和刷新
我想要实现的是,如果可能的话,让链接器尽可能地保持现有的结构。例如,如果我删除某个地方的if检查,代码将变小几个字节,所有后续信息将移位几个字节,因此整个闪存将被擦除并重新编程
如果链接器能够以某种方式在链接符号之间添加填充,则通常可以跳过大量flash而不覆盖。当代码变
标签: Linker
shared-librariesip-addresstraceperf
在后处理期间,perf如何确定每个加载映像(例如,共享库)的加载地址。例如,perf report使用此信息使每个符号地址相对于每个加载图像的开头。如下图所示(展开:\u int\u malloc…):
它是否存储在elf二进制输出或分析输出(即perf.data)的某个位置?仅通过查看elf可执行文件和库是无法找到它的。每次跑步都会有所不同;即使ASLR像GDB一样被perf禁用,程序也可能在使用某些只在稍后加载的可选库的dlopen之前使用mmap(MAP\u FIXED),因此dlope
标签: Linker
shared-librariesstatic-libraries
在这方面我不需要什么澄清。我觉得术语静态库和动态库不正确
lib1.o+lib2.o+lib3.o-->“LinkedRoutPutFile”(可执行文件或库)
如果此“LinkedRoutPutFile”包含所有文件lib1.o、lib2.o、lib3.o的代码,则其表示“LinkedRoutPutFile”以讽刺方式链接到“LinkedRoutPutFile”(可执行文件或库)。(或)
如果“LinkedRoutPutFile”只包含对lib1.o、lib2.o、lib3.o的引用和其他信
我已经在Windows中实现了elf解析器的一些方面,直到获得符号表信息和符号相关信息。现在我想继续了解更多关于链接和加载的信息,我相信这与解析elf文件中的程序头有关
到目前为止,elf格式规范非常有用,但我发现很难理解和关联重定位信息、链接和加载到虚拟内存中
有人能推荐一份好的参考资料或文件吗?约翰·R·莱文(John R.Levine)的《链接器与加载器》(Linkers&Loaders)是本书的开头吗?目前,我的要求仅限于elf文件格式。John R.Levine的链接器和加载程序绝对是
我想知道是否有人知道如何在Microsoft visual studio中链接.so动态库(或用于该主题的.so静态库)。以下步骤对.a或.so都不起作用
我正在使用MVS在android NDK中开发vs android插件,并尝试向项目中添加一个自定义库,编译为.so
1-我在同一个解决方案中创建了一个动态库(.so)项目以及一个示例项目(san angeles项目)
2-我已经设置了.so项目,让我们把它称为“引擎”,作为对旧金山的依赖。engine.so文件生成时没有任何问题,并显示在{
标签: Linker
shared-librariesstatic-librarieslibstdc++
当我在MATLAB中执行程序时,libstdc++.so.6库有问题。该代码在我的笔记本电脑和台式机上运行良好,这就是为什么我确信问题在于库或链接兼容性问题:
/home/arturo/Virality/viral\u cluster\u ml/viral\u features/code/segment\u pedro/segment:加载共享库时出错:libstdc++.so.6:错误的ELF类:ELFCLASS64
我在谷歌上搜索了一些关于如何修复库的答案,有些人说我应该删除库,以便以后重新
标签: Linker
shared-librariessolarisvisibility
使用GCC(在Linux上),我可以轻松地创建库
我在Solaris(10)上有哪些选项
这些GCC功能是否也适用于Solaris上的GCC(特别是使用Solaris链接器/汇编程序的GCC)
Solaris Studio C编译器/链接器是否提供了类似的属性/杂注来控制符号的可见性(即,将默认值设置为隐藏并显式将符号标记为可见)?无法回答有关Solaris上gcc可见性的问题,但是
太阳工作室里有
编译器选项-xldscope,代码属性_global/_hidden
据
:
自版本8(CC版本
标签: Linker
nasmcrtuniversal-crt
环境:Windows10。我碰巧使用了MinGW版本的ld进行链接,但是如果visual studiolink.exe使事情变得更简单,我很乐意使用它
我在nasm中有以下基本程序:
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, Wo
考虑以下情况:
变量X和Y是库的一部分,我们称之为lib.o。我们无法修改库的相应源代码(例如,添加pragmas)
X必须链接到Y以外的另一个节,这两个节当前都在同一节中定义
链接器是否可能(通常)将库中的单个变量链接到特定(可能是新的)部分
这个问题背后的原因是库有一个缓冲区溢出错误(memclr with to small buffer(变量X))并覆盖变量Y。临时解决方法(直到库被卖方修复)是将变量X链接到一个部分并留下一些空间,这样memclr就不会伤害重要的变量 如果编译器是GC
在嵌入式目标(ARM CORTEX M3)上,我想保留一个由另一个二进制文件加载的特定内存区域,并防止链接器将当前二进制文件中的任何符号分配给该特定区域。我成功地将所有默认代码/常量节定位到所需的内存区域,但链接器将属于.text.peanel.long*等节的一些符号放置到我要保留的区域。如何防止这种情况
我已经尝试过将所有.text.pein.也分配到所需的区域,但我想要实现的是防止任何东西被分配到保留区域。我还尝试在链接器脚本中为内存区域使用type=reserved rom定义,但链接器
标签: Linker
microcontrollerelflinker-scriptsflash-memory
因此,我试图在引导加载程序和主代码之间的某个地址添加闪存的保留部分,该地址位于闪存的自己扇区中(我使用的是STM32F4)。当我在代码中使用该部分时,elf基址会发生变化,我的调试器会崩溃,但是十六进制(显然)可以工作。在我的调试器中打开elf时,它会查找错误的基址0x8000000。由于FLASH位于0x800C000(isr_向量加载在那里),调试器无法启动代码
那么,我的问题是,为什么添加这个部分会导致elf重新设置地址的基址?我使用另一个代码库,其中这是由另一个人为STM32F0实现的(
我想知道如何手动链接ELF文件。我知道文件结构,但如何确定可重定位对象的链接顺序?从包含入口点的对象开始。解析其内部引用。然后取第一个未解析的引用。查找定义未解析引用的对象并将其链接到中。现在可以解析所有引用。如果仍有未解析的引用,请重复此过程。像这样的
标签: Linker
Cmake
static-librariesvisual-studio-2008-sp1
我正在使用VisualStudio2008 SP1(专业版,适用于32位和64位)
构建)。我正在寻找一个解决办法,我认为这是一个非常重要的问题
Visual Studio中的“”没有帮助
我觉得很有趣
令人惊讶的是,VisualStudio链接器和编译器在DLL文件中没有这样做
创建时间,自动扫描所有指定的静态库
以和中给出的相同方式用于所有导出符号。我确认仅仅申请是不够的
\uu declspec(dllexport)和\uu declspec(dllimport)属性
类、函数和数据声明,
objdump如何计算elf段的物理地址(LMA)?据我所知,elf节头仅包含节[1]的虚拟地址(VMA)
通常,VMA和LMA是相同的。但对于初始化数据段(.data),VMA是变量的RAM位置,LMA是初始值所在的ROM位置。Crt0负责在调用main()之前将初始值复制到RAM中。例如:
$ objdump -h my.elf
Sections:
Idx Name Size VMA LMA File off Algn
0 .text
我多次听说汇编程序和链接程序需要至少遍历输入文件2次,这真的有必要吗?为什么不能一次完成呢?一个必要的例子是两个函数互相调用
int sub_a(int v);
int sub_b(int v);
int sub_a(int v) {
int u = v;
if ( 0 < u ) {
u = sub_b( v - 1 );
}
return u - 1;
}
int sub_b(int v) {
int u = v;
i
ALIGN关键字在链接器脚本中起什么作用?我读了很多关于链接器脚本的教程,但我不明白ALIGN到底做了什么。有人能简单地解释一下吗。谢谢 一个典型用法是
. = ALIGN(8);
这意味着:插入填充字节,直到当前位置在8字节边界上对齐。即:
while ((current_location & 7) != 0)
*current_location++ = padding_value;
=对齐(8)
对应于以下内容(使用运算符的工作链接脚本示例):
ALIGN()指令告诉链接器,
我正在尝试编译简化的叮当声“driver.cpp”-为参数添加了printf-我正在获得与libLLVMSupport的链接。错误-未找到StringSaver类
# lib
echo "compiling cmd builder (x86_64) ..."
clang++ `../llvm_34_local_installed2/bin/llvm-config --cxxflags` -I ../llvm_34/tools/clang/include -I ../llvm_34_build_l
在下面的程序中,我想知道为什么main不会像其他方法一样损坏:
int main()
{
}
int main1()
{
}
如果我检查出nm,我看到主方法没有损坏,而main1是。我尝试使用#pragma条目将程序条目从main更改为main1,但没有效果
谢谢你在这方面的帮助
如果我检查出nm,我会看到main方法没有损坏,而main1没有损坏
main符号在几个方面都很特殊:
你不能记下它的地址
你不能自己叫它
它不能被损坏,因为标准C运行时库将通过unmangledmainn
标签: Linker
cross-platformstatic-librarieslinker-errorspjsip
我正在尝试使用PJSIP编写一个非常小、非常简单的项目。但我已经停留在第一步,将PJSIP纳入我的项目中。我正在尝试使用arm linux gnueabihf gcc交叉编译器在Ubuntu 14.04系统上构建和编译。对于编码本身,我使用的是EclipseCDT,但是交叉编译部分的工作顺序是正常的
我已将de pjproject-2.3文件夹下载到我的系统中,并使用以下命令对其进行了配置:
./configure --host=arm-linux-gnueabihf CFLAGS='--
我正在尝试创建一个链接器命令脚本,以便通过使用multiboot的遗留grub进行引导。在前8192字节内,我很难将multiboot头放在所需的位置。我的脚本看起来像:
SECTIONS
{
.multiboot :
{
__multiboot_header = .;
*(.multiboot)
}
.text 0x00100000 :
{
*(.text*)
*(.rodata)
最近我一直在学习linker并尝试使用ld链接简单的文件,但后来我失败了(可能是因为架构x64?…我真的不知道)。以下是我使用的文件:
#include<stdio.h>
int fun(int x);
int main(){
int i = fun(10);
printf("%d\n",i);
return 0;
}
我使用gcc-c命令编译它们,然后使用命令将它们链接到单个文件中:
ld -r -o a.o main.o fun.o
最后,我想把a
标签: Linker
msvcrtstatic-linkingcrt
我正在VisualStudio2005中构建我的应用程序,使用项目属性->c/c++->代码生成->RuntimeLib:MTd,使用静态CRT库LIBCMTD。该应用程序使用第三方DLL和lib,它们内置于MDdusing dynamic CRT lib-MSVCRTD中
我收到的链接器错误如下:
msvctd.libMSVCR80D.dll:错误LNK2005:_mktime64已在LIBCMTD.libmktime64.obj中定义
msvctd.libMSVCR80D.dll:错误LNK
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 23 页