编译一些CUDA代码时,我得到一个错误,即即使我检查了路径是否正确,也找不到libcutil
示例
$ nvcc mycudacode.cu -lcutil -o mycudaproject -I ~/NVIDIA_GPU_Computing_SDK/C/common/inc -L ~/NVIDIA_GPU_Computing_SDK/C/lib
/usr/bin/ld: cannot find -lcutil
compilation terminated.
尽管:
$ ~/NVIDIA_GP
告诉CMake使用LLVM链接器LLVM链接而不是GNUld作为链接器的最佳方式是什么?使用配置项目时
CXX=clang++ cmake <args>
CXX=clang++cmake?这与cmake无关:clang++默认使用系统链接器。比如说,
echo "#include <atomic>\n int main() { return 0; }" \
| clang++ -x c++ -std=c++11 -stdlib=libc++ -
这绕过了从3.
我正在尝试从for ARM/Windows RT编译此文件,我的编译器不断出现以下错误:
1>LINK : fatal error LNK1104: cannot open file 'vccorlibd.lib'
我在我的电脑上搜索了一下,发现这个库确实存在,而且它存在于
“C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\lib”。所以我不确定到底出了什么问题。任何东西都会有帮助。应用程序的路径包含空格。按照,将库的路径用双引号
在kdevelop接口中没有设置应该链接或不应该链接的文件的选项。如何解决链接问题?需要将源文件添加到CMakeLists.txt文件中的项目中。替换:
add_executable(example main.cpp)
与:
应该是这样
add_executable(example main.cpp)
set(MySources main.cpp calculation.h calculation.cpp)
add_executable(example ${MySources})
我很好奇链接器如何链接不同对象文件中具有相同类型但不同标志的段。例如,我们现在有两个ELF对象文件foo.o和bar.o,它们都有一个.text段(代码段)。但是,foo.o中的.text段可以写入,而bar.o中的段不能写入。在这种情况下,链接器将如何链接这两个段?链接器将如何设置链接文件中.text段的标志
谢谢并致以最良好的问候
链接器将如何设置链接文件中.text段的标志
链接文件中没有.text段:将.text节放入一个加载段中
链接器可以选择要执行的操作
它可以创建具有不同标志的多
我正在尝试用LLVM编译apache2,以在LLVM IR中生成最终的二进制文件
我在编译和链接时使用了flto选项,并通过clang将“还发出llvm”传递给链接器。
它似乎适用于大多数步骤,但我有两个顾虑
1) 之前我使用了LLVM3.6,它的黄金插件不接受也发射LLVM,但只发射LLVM,基本上它只发射elf或LLVM。这是Autotools构建系统不喜欢的。configure和make脚本需要二进制文件,而我需要llvm。有什么解决办法吗
2) 因此,我转向LLVM 3.5.2,构建过程
标签: Linker
shared-librariesqt-creatorstatic-librariesscaleform
我想创建一个应用程序并在其中使用Scaleform。我使用Qt Creator,所以在.pro中添加了Scaleform的includes和libs,但在编译时出现了错误。
下面是我在.pro中添加的内容(有些行可能没有用处,但它只是为了测试,因为没有它就无法工作):
在my.cpp文件中:
#include "GFx_Kernel.h"
#include "GFx.h" //causes the errors
#include "GFx_Renderer_D3D9.h"
这将导致以下错误:
标签: Linker
compiler-optimizationinstrumentationlibc
我的情况是,我创建了一个编译时插装系统,在应用程序中插入代码,该应用程序对其内部状态进行一些簿记,以便进行动态分析。注入的代码依赖于实现必要数据结构的运行库
为了提高我的工具的准确性,我想在对libc的调用中跟踪对内部状态的更改。为此,我编译了musl的一个插入指令的版本
问题是,我的运行库基于各种原因依赖glibc(无法更改)。如何让应用程序使用插入指令的musl符号,而让运行库使用普通的glibc符号?要清楚:您想在同一个过程中使用glibc和musl吗?我不认为这是一种合理的方法,也不认为
我正在开发自己的操作系统,但为此我需要接触链接,然后我完成了以下链接脚本来构建它:
ENTRY (loader)
SECTIONS{
. = 0x00100000
.text : {
*(.text)
}
.bss : {
sbss = .;
*(COMMON)
*(.bss)
ebss = .;
}
}
.data ALIGN (0x1000) : {
start_ctors = .;
我想为使用旧solaris(libc.so SUNW_1.22.4)的系统编译/链接新的solaris版本(libc.so SUNW_1.22.6)。如何指定链接器(在新版本上)应该构建一个使用旧版本(1.22.4)libc.so的二进制文件?不要调用任何不在SUNW_1.22.4中的函数。链接器根据链接到的函数记录最小依赖关系。通常,UNIX系统支持向后兼容性(在旧系统上构建的程序继续在新系统上工作),但不是相反:在新系统上构建的程序可能无法在旧系统上工作
因此,在您将要支持的最旧操作系统版本
在查找基本的裸机Cortex-M3编程信息时,我遇到了与以下内容非常相似的情况(这里有一个很好的答案,稍后我将尝试查找)
这对我来说是有意义的,我理解它的作用,但对我来说没有意义的是链接器(或CPU,我不确定哪个…)如何知道异常表的结束和实际代码的开始。在我看来,从Cortex-M3文档中可以看出,表中可以有任意数量的外部中断
这是如何工作的,我应该读些什么来学习?这是我的代码,程序员而不是链接器需要知道发生了什么。cortex-m有不同的向量表,它们可能相当长,有许多单独的中断向量。以上只是某
我有一个子文件夹1/submin.c
{
//initialize statements
CallFunction1();
}
子文件夹2/submin.c
{
//initialize statements
CallFunction2();
}
等等
在main文件夹中有一个make文件,包括所有子文件夹。如子文件夹1子文件夹2等。主文件夹也有一个main文件.h,其中包含所有函数定义(如CallFunction1和CallFunction2)。我通过实践知道,在.
从qmake生成的Makefile执行此链接器命令后,我收到以下错误
clang++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o bin/Clock tmp/clock.o tmp/config.o tmp/main.o tmp/qrc_resources.o tmp/moc_clock.o -L/Users/foo/Qt5.0.0/5.0.0/clang_64/lib -lQt5Widgets -lQt5Gui -lQ
我已将glibc-2.18安装到我的主目录中,并希望针对它链接应用程序:
$ g++ -pthread -o tsx_test tsx_test.cpp -Wl,--rpath=/home/hl/lib/ \
-Wl,--dynamic-linker=/home/hl/lib/ld-linux-x86-64.so.2
使用g++4.7.3编译和链接工作正常,但在执行时失败:
$ ./tsx_test
./tsx_test: error while loading shared librar
我将继续维护几个名为“遗留项目”的项目。我有一个单独的WindowsXP系统
其中大多数是VB6程序。我有一个是我被迫改变的。只是现在它拒绝生成新的可执行文件,并给出上述错误消息:
链接:致命错误LNK1104:无法打开文件“C:\Documents And Settings\Me\My Documents\VB6 Projects\Some目录路径名\MyProjectDirectory\MyProjectExecutable.exe
我打开了一个旧版本的项目,它编译并创建了可执行文件
出于挫
标签: Linker
embedded-linuxlinker-errorsbitbake
我在构建core image minimal时,开始收到LD_预加载错误:
ERROR: core-image-minimal-initramfs-1.0-r0 do_rootfs: [log_check] core-image-minimal-initramfs: found 1 error message in the logfile:
[log_check] ERROR: ld.so: object 'libpseudo.so' from LD_PRELOAD cannot be prel
标签: Linker
unresolved-external
我已经发布了我的2个源文件。在过去的6个小时里,我一直试图找出问题所在,但我找不到解决这些错误的方法:
1> Mainirk.obj:错误LNK2019:未解析的外部符号“public:u thiscall pokemon::pokemon(int,int,int)”(??0pokemon@@QAE@HHH@Z) 在函数“void\u cdecl`敌方(void)”的动态初始值设定项中引用(??\u Eenemy@@YAXXZ)
1> C:\Users\Taylor\Documents\Visu
标签: Linker
solarisx86-64relocationfpic
在静态库中放置位置无关的代码时会发生什么?(特别是在x86-64上)
也就是说:使用PIC生成多个.o文件,并将其放置在.a文件中。此.a与正常情况一样静态链接到最终可执行文件中
这似乎有效,但这样做有意义吗?为什么?
最后的地址计算是怎么做的?(链接时间?运行时间?)
谢谢IIRC在PIC系统中,所有全局变量都将通过PIC访问
PIC的整体思想是只需要调整一个表(GOT),而不是代码中的每个全局访问
代码本身是位置独立的,因为它通过GOT访问,并且GOT的位置(相对于指令的地址)在最终链接期间
标签: Linker
autotoolsautoconfautomake
我是autotools的初学者,我似乎不知道如何使用autotools正确使用外部库
这是我的目录层次结构
.
├── configure.ac
├── Makefile.am
├── README
└── src
(source files)
└── Makefile.am
库的名称为acml\u mp,默认情况下安装在/opt/acml5.3.1/gfortran64/lib中。还有一个名为/opt/acml5.3.1/gfortran64/include的目录要包含。当我
我试图用libmaxminddb替换libgeoip。我正在使用CMake构建系统。
链接时,它会因未定义引用而失败,但存在-lmaxminddb
liblua_modules.a是包含对MMDB_open()的调用的库
你考虑过改变链接顺序吗?这通常可以帮助你解决这类问题
而不是
target_link_libraries(foo maxminddb object1 object2 object3)
将maxminddb向后移动,以便链接器已经知道要查找哪些函数
目标链接库(foo obje
我目前正在尝试将一些fortran例程与IDL接口,是的,这听起来很痛苦。首先,我试图让IDL文档中给出的示例正常工作,但在这里遇到了一个非常奇怪的问题。当我试图传递一个数组时,如这里所示,代码只传递第一个元素
这是我使用的代码。目前我使用上面链接中给出的c包装器
fortran代码。clf.F
SUBROUTINE SUM_ARRAY1(array, n, sum)
implicit none
INTEGER n,i
INTEGER array(3), sum
sum=0.
我如何告诉lld将代码放置在某个位置或其上方
我有一个依赖于一个相当可疑的逻辑的函数:某个函数可以接收一个值,该值表示函数指针数组中的索引,或者实际上是函数指针。函数通过检查值是否小于0x10000,确定值的类型;如果是的话,它就是一个索引。如果不是,它就是一个函数指针
尽管我真的很想,但我不能更改这段代码
不幸的是,该测试甚至不起作用:在OSX上(在其他地方,它还没有表现为任何人的问题),程序中的函数指针的地址可能比阈值低得多,这意味着有问题的函数将它们检测为索引而不是指针,一切都出错了
我是
我尝试为GNURadio编译一个OOT模块,它使用外部设备驱动程序(LimeSuite.h)作为动态链接的共享对象(.so文件)。添加后
find_package(LimeSuite)
在cmake/Modules(cf.)下的相应模块中,我能够使用make进行编译,并且我观察到以下变量发生了变化
CMAKE_CXX_FLAGS=-lLimeSuite
LIMESUITE_FOUND=1
LIMESUITE_FOUND=1
LIMESUITE_INCLUDE_DIR=/usr/include
我正在尝试使用Clang而不是默认GCC构建和链接库,并收到以下链接器错误:
/usr/bin/ld: build/temp.linux-x86_64-3.6/torch/csrc/autograd/engine.o: undefined reference to symbol '_ZNSt18condition_variable10notify_oneEv@@GLIBCXX_3.4.11'
我的命令是:
CC="clang-5.0" CXX="clang++-5.0" LDSHARED="
标签: Linker
environment-variablesvisual-studio-2019pre-build-event
我在VisualStudio 2019中的C项目中使用微软C++工具集中的LIK.EXE。
问题是,每次Visual Studio 2019更新时,它都会因为MSVC文件夹的版本而更改路径
例如:
在VS 16.2.0中,link.exe的路径从..\14.21.27702更改为。。。至..\14.22.27905
我搜索了一个环境变量,但找不到它
我的完整命令行:
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Community\VC\To
标签: Linker
loadingdynamic-library
当在磁盘上加载、更新一个动态库,然后启动一个链接到该库的新进程时,linux中会发生什么?新进程是否与旧的内存副本或磁盘上的较新版本相链接?当软件包管理器更新磁盘上的文件时,他们实际上会删除旧文件并在其位置写入新文件。结果是,已经打开库的旧应用程序会继续看到旧文件——旧文件仍然存在于磁盘和内存中,但不再有指向它的文件名。这些类型的文件称为孤立文件
同时,应用程序在库被替换后启动,开始使用库的更新版本
这就是为什么断电后,您有时会在日志或启动过程中看到以下消息:
EXT4-fs (sda3): 3
标签: Linker
elfdynamic-linkingbinaries
我有一个关于Linux上的动态链接的问题。考虑下面的ARM二进制拆分。< /P>
8300 <printf@plt-0x40>:
....
8320: e28fc600 add ip, pc, #0, 12
8324: e28cca08 add ip, ip, #8, 20 ; 0x8000
8328: e5bcf344 ldr pc, [ip, #836]! ; 0x344
....
83fc <main>:
我有一个链接器脚本,用于链接imx6q(cortex-A9)的代码:
当我构建时,二进制大小只有6KB。但是我不能添加任何初始化变量。当我添加一个初始化变量时,二进制大小跳到~246MB。为什么呢?我试图通过指定精确位置并为数据段提供>DDR,将数据段链接到文本部分后面的位置。尽管这似乎将二进制文件的大小减少到6KB,但二进制文件无法启动。如何将代码保存在DDR中,将数据、bss、堆栈和堆保存在内部ram中,并保持较小的二进制大小
我在另一篇文章中读到“在链接器脚本中使用内存标签应该可以解决内存
标签: Linker
ldgold-linkerbfdlld
黄金的男人说:
-L DIR, --library-path DIR
Add directory to search path
--rpath-link DIR
Add DIR to link time shared library search path
bfdld的man使其听起来有点像-rpath链接用于递归包含的sos
ld.lld甚至没有将其列为参数
有人能为我澄清一下这种情况吗?bfd ld使用--rpath link选项添加到搜索
标签: Linker
g++shared-librariesglfwdylib
我正在为我的opengl项目链接glfw3库。我尝试在Mac和Linux环境中编译和运行代码。在Linux中,glfw3库存储为libglfw.so.3.2,而在Mac中,它存储为libglfw.3.2.dylib
为了在Mac中为g++链接这个库,我只需要使用以下代码
g++ -o Animation glad.o Animation.o -L/usr/local/lib -lglfw
在Linux中,我必须包含-ldl,否则它会打印错误
g++ -o Animation glad.o An
我有一个链接器脚本,可以按照特定的顺序对部分进行排序。但是,我想知道是否可以指示链接器将节头表的偏移量(e_shoff)放在.shstrtab的偏移量之前。下面readelf-h的输出可能表明e_shoff位于.shstrtab之前。但并非所有binutils版本和新链接器都是如此
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class:
我有下一个文件夹结构:
关于$My_Eclipse_项目
jni/Android.mk
jni/Application.mk
jni/main.cpp
解放党/
关于$My_Library_项目
src/
包括/
Android.mk
$My_Eclipse_Project/jni/main.cpp是一个基本的makefile,根据$My_Library_Project/Android.mk中的说明调用源代码进行编译
# NOTE:
$(warning Compiling Andr
标签: Linker
g++codeblocksgfortran
我在Vmware下有一个Ubuntu,并使用Code::Blocks,因为我不是一个非常强大的命令行用户
更喜欢IDE而不是Vim+控制台
我试图编译一个程序,它使用C++包装器来forFortran库。
但是,编译给了我以下错误:
undefined reference to `_gfortran_compare_string'
有很多这种类型的错误,还有很多类似的错误
我有gfortran 4.6.3。我发现搜索可能是一个链接问题,人们说
为链接器使用-lgfortran选项。当我在Cod
我想编译一个OpenCL程序,它使用clAmdFFT,AMDs OpenCL FFT,这是一个封闭源代码
$ objdump -x libclAmdFft.Runtime.so
Dynamic Section:
NEEDED libOpenCL.so.1
Version References:
required from libOpenCL.so.1:
0x028568b0 0x00 05 OPENCL_1.0
在一台机器上,我使用的是AMD驱动程序
标签: Linker
lddynamic-linkingcc
这项工作:
cc leveldb_ext.cc leveldb_object.cc -o leveldb.so -I /usr/include/python2.7 -lpython2.7 -lleveldb -lsnappy -shared -lc
这不起作用:
cc -I /usr/include/python2.7 -g -c leveldb_ext.cc leveldb_object.cc
ld -shared -o leveldb.so -lpython2.7 -lleveldb -l
我有一个VC项目,在几个源文件中放置了数百个全局变量和缓冲区。我希望链接器在最终输出可执行文件中物理上相邻地放置这些变量,以便我可以轻松地清理这些变量。
我知道gcc链接器可以通过链接器脚本实现这一点。我只是想知道vc链接器是否也能做到这一点
谢谢您可以使用
#pragma section( "section-name" [, attributes] )
声明一个新的节。然后使用
__declspec(allocate("segname")) declarator
指定全局变量放置在哪个节中
是否可以仅使用GNU LD命令行选项而不是Cortex-M4目标的惯用-T脚本文件来创建基本裸机程序集启动/启动程序
我已经查阅了GNU LD文档,并搜索了包括本网站在内的各个位置;然而,我没有发现任何信息表明GNU链接器的命令行选项的独占使用是可能的或不可能的
我试图在没有传统供应商提供的*.ld scriptfile的情况下管理对象文件布局纯粹是学术性的。这不是家庭作业。我没有要求任何关于编写启动程序集代码的帮助。我只是在寻找一个明确的答案或进一步的资源方向
$ arm-none-eabi-
标签: Linker
compiler-warningsclang++
我只是在学习如何编码
我已经使用visual studio 14在windows 10系统上安装了clang版本5
我创建了一个hello world cpp文件来测试它是否正常工作
示例代码
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!\n";
int rip{1};
int dal{4};
int kane = rip + da
我正在MacOS上的Rust中进行一个项目,其中包含一些附加的C/Fortran依赖项。我的所有依赖项都安装在我的Conda环境中。不幸的是,调用cargo test会导致运行时失败,因为它无法找到libfortran.3.dylib:
$cargo测试
...
dyld:未加载库:@rpath/libgfortran.3.dylib
引用自:/Users/user1/my_project/。。。
原因:找不到图像
...
将LD_LIBRARY_PATH设置为指向正确的位置将删除此问题:
$
我们正在使用一些第三方库(**.a文件)构建一个嵌入式应用程序(ARM Cortex M4)。该库中的符号会显示在地图文件中吗
据我所知,映射文件列出了所有符号,包括变量和函数名,但在映射文件中,我没有从列出的链接库中找到特定符号。库是单个文件包中的对象文件集合。链接器仅提取和链接解析来自其他对象文件的引用所需的那些对象文件,其他任何内容都将被忽略
因此,地图文件将仅显示链接器实际包含的符号,而不是整个库
编译器可能支持“used”指令,以强制链接中包含其他引用的代码。映射文件将包含链接到库中的
这是我的装订
{
'targets': [
{
'target_name': 'binding',
'sources': [ 'binding.cc' ],
'includes': ['../common.gypi'],
"cflags" : ['-march=armv7-a -mfloat-abi=softfp -mfpu=neon --sysroot=/2nd-hdd/home/pkang/sdk/tm2sdk/sysroots/a
在VirtualBox Ubuntu 64位上编译上述代码并运行,我得到:
文本位于0x55468A
pmap:
00005540004K r-x--a输出
但是,
objdump-dj.text a.out | sed-n'/:/,/^$/p':
000000000000068a:
68a:55%rbp
gdb a.out
主功能的汇编程序代码转储:
0x000000000000068a:推送%rbp
链接的代码的地址完全不同
链接代码的地址完全不同
您正在查看,它在运行时被
我有现有的Linux共享对象文件(共享库),它已经被剥离。我想制作一个包含一些附加功能的新版本的库。我曾希望下面这样的方法会奏效,但没有:
ld -o newlib.so newfuncs.o --whole-archive existinglib.so
我没有现有库的源代码。我可以得到它,但是对于一个看似简单的问题来说,获得一个具有必要依赖关系的完整构建环境需要付出大量的努力。共享库不是存档,它们更像是可执行文件。因此,您不能像静态库那样将额外的内容塞进它们。您可以尝试从稍微不同的角度,使用
我在使用“英特尔Fortran 11.1”在Visual Studio 2010中将HDF5库与解决方案链接时遇到问题
具体的错误消息是:
error LNK2019: unresolved external symbol _H5F_mp_H5FOPEN_F@24 referenced in function _WRITE_HDF5_ARRAY_2D
这个符号应该在hdf5_fortran.lib库中,检查hdf5_fortran.lib文件中的符号,我发现它确实包含这个符号
00B 0000
我确信这已经一次又一次地出现了。我得到以下错误:
1> precision.obj:错误LNK2001:未解析的外部符号“int NPRESCISION”
在我的程序precision.cxx中,我有一个#include to u.hxx,它有以下声明:
外部内部精度
当然,现在它将变量nprecision读取为外部变量,应该可以了。我不确定发生了什么事
如有任何建议,将不胜感激。我已经做了我能想到的一切
问候
Mat您声明了nprecision,这使编译器感到高兴,但您还需要定义nprecis
我正在Altera Nios II软核上构建一个项目;由于我使用的是具有片上闪存的新Max 10,我想将代码分为低性能代码(运行在片上闪存中,.text)和高性能代码(运行在紧密耦合的片上RAM中,.tight\u instr)
使用\uuuuu属性(section(“.tight\u instr”))指令,我已经完成了选择要链接到特定section的函数的任务,但是,由于这些函数调用了一些libgcc模块,我希望将这些模块也放在同一节中
由于片上RAM有限,我无法将所有libgcc模块链接到.
标签: Linker
static-linkingunix-ar
比如说,,
我们有以下三个图书馆:
1.1…………自由党A.A
1.2………自由B.a
1.3………..lib_C.a
现在我想创建一个库,它由上面所有的静态库组成
我使用了以下命令:
ar -crs lib_Z.a lib_A.a lib_B.a lib_C.a
当我使用lib_Z.a创建最终可执行文件时,编译器给出以下错误:
添加符号时出错:存档没有索引;运行ranlib添加一个
如何解决这个问题?您的lib_Z.a不包含任何对象文件;它只包含其他.a文件,加载程序不知道如何处理这些文件。
标签: Linker
executableexeportable-executable
为什么加载程序在一个基本上是0X10000或者在大多数情况下是0X400000的虚拟地址加载任何exe??它不是应该在地址0X00000处加载它吗,毕竟地址是虚拟的,每个进程都有自己的地址空间??这不是更方便吗???它看起来应该可以帮助您理解在加载程序加载映像时基址和内存映射的问题
有哪些有用的编辑器/设置用于编辑链接器文件,特别是LD格式
对于上下文,我正在编辑一个i386 elf LD文件。我通常使用Eclipse的“彩色编辑器”来实现这一点,但无可否认,它对于LD格式来说非常糟糕
*我放弃寻找;我什么也没找到。我真的想要一个 Vim支持多种格式,其中一种是。它并不完美,但做得相当不错
来自的示例LD脚本。vim确实做了我发现的最好的工作。然而,我是一个GUI的家伙,所以我仍然在寻找一个基于GUI的解决方案。我确实得出结论,eclipse中的任何编辑器都很糟糕!在我的
我开发了一个具有重叠区域的链接器脚本。我希望链接器为重叠区域生成错误。我正在使用-check sections命令行参数,但它不起作用。以下是我的脚本文件的一小部分:
.region1 (DDR_ORG) (NOLOAD) :
{
. = . + 0x1000;
} > DDR
.region2 (DDR_ORG) (NOLOAD) :
{
. = . + 0x100000;
} > DDR
1 2 3 4 5 6 ...
下一页 最后一页 共 23 页