首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >相同的源,带有链接器脚本变量的两个不同的二进制文件。

相同的源,带有链接器脚本变量的两个不同的二进制文件。
EN

Stack Overflow用户
提问于 2022-01-21 02:58:53
回答 1查看 90关注 0票数 1

使用CMake,我尝试使用相同的源和相同的链接器脚本来生成两个不同的二进制文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* Specify the memory areas */
MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 320K
FLASH (rx)     : ORIGIN = APP_ORIGIN, LENGTH = 0x40000
}

APP_ORIGIN被设置为链接器脚本中的输入,使用--defsym=APP_VALUE=VALUE。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set(APP1_ORIGIN 0x0800C200)
set(APP2_ORIGIN 0x0804C200)
SET(CMAKE_EXE_LINKER_FLAGS "-T${LINKER_FILE} -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -specs=nano.specs -lc -lm -lnosys -Wl,-Map=${PROJECT_NAME}.map,--cref -Wl,--gc-sections -Xlinker -print-memory-usage -Xlinker --defsym=APP_ORIGIN=${APP1_ORIGIN}")

关键是I不知道如何修改带有APP2_ORIGIN值的CMAKE_EXE_LINKER_FLAGS并再次触发链接。

这可以用两个不同的目标来完成,但是如果只有一个链接器脚本,只需要维护一个,,因为应用程序是完全相同的,只有偏移量会改变。

我尝试了不同的POST_BUILD定制目标方法,但直到现在都没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-21 03:36:08

文件是从输入模板生成的。

创建一个文件inputfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* Specify the memory areas */
MEMORY
{
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 320K
FLASH (rx)     : ORIGIN = @APP_ORIGIN@, LENGTH = 0x40000
}

那就做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
configure_file(inputfile ${CMAKE_BUILD_DIR}/linkerscript1 @ONLY)
configure_file(inputfile ${CMAKE_BUILD_DIR}/linkerscript1 @ONLY)

或者,add_custom_command和自定义脚本也是如此。

然后做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_library(allobjectfiles all_your_files.c)  # maybe OBJECT library?
 
add_executable(yourtarget)
target_link_libraries(yourtarget allobjectfiles)
target_link_options(yourtarget PUBLIC
     -T${CMAKE_BUILD_DIR}/linkerscript1
)
set_target_properties(yourtarget PROPERTIES LINK_DEPENDS
     ${CMAKE_BUILD_DIR}/linkerscript1
)

# Repeat above for linkerscript2 with different target name
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70800199

复制
相关文章
ansible执行带有环境变量的脚本不生效
jenkins发布时,使用ansible执行远程主机上的启动tomcat脚本发现不生效,启动tomcat的脚本中有环境变量。
HaydenGuo
2019/12/12
2.9K0
ansible执行带有环境变量的脚本不生效
dart - 如何在带有DartFlutter的不同类上使用变量
我有一类是我的getToken类。在此类中,我得到的 token 是字符串 token 。这是我的 getToken.dart
徐建国
2021/08/03
2.7K0
【脚本】配置yum源的repo文件
执行前需要把centos的镜像和iaas的镜像 上传到/root上,如果其他地方,可以去脚本里修改目录
Xiongan-桃子
2023/06/10
5800
python匹配两个文件中相同的内容
data_small.txt中内容如下: 343 0 5258 1 3973 2 data_big.txt中内容如下: 343 2009-05-30T17:01:58Z 39.04183745 -94.5914053833 9191 343 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904 23 2009-05-28T23:40:31Z 39.0523183095 -94.6074986458 8904 56 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188 5258 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927 5258 2009-05-27T18:59:50Z 39.0424168 -94.59061145 9188 545 2009-05-15T00:09:42Z 38.9920234667 -94.5920920333 10927 3973 2009-05-14T20:47:20Z 39.0142536 -94.5928215833 12305 3973 2009-05-14T20:43:05Z 39.0146281324 -94.5907831192 9627
全栈程序员站长
2022/11/07
2.3K0
相同的时间,不同的人生
在规定的时间内,一个人目标的达成情况(创造的价值),我们称之为效率。如此可见效率与时间是密切相关的,提高效率首先要做的就是提高我们的时间利用率。
keinYe
2020/05/25
1.2K0
Java如何校验两个文件内容是相同的?
今天做文件上传功能,需求要求文件内容相同的不能重复上传。感觉这个需求挺简单的就交给了一位刚入行的新同学。等合并代码的时候发现这位同学居然用文件名称相同和文件大小相同作为两个文件相同的依据。这种条件判断靠谱吗?
码农小胖哥
2021/12/01
2.1K0
Java如何校验两个文件内容是相同的?
找出两个文件中相同的单词(java实现)
第二种比较单词的方法:将string【】数组转换成集合,通过集合的retainAll()方法 两个集合取交集
崔笑颜
2020/08/24
1.7K0
python引入相同和不同(模块)文件夹下py文件的类
从SyncMysqlMongo中引入MongoDBUtil.py和MySQLUtil.py中的两个类(这里的类名和文件名一致)
静谧星空TEL
2022/01/05
8.1K0
python引入相同和不同(模块)文件夹下py文件的类
ReverseSSH:带有反向Shell功能的静态链接SSH服务器
ReverseSSH是一款功能强大的静态链接SSH服务器,ReverseSSH带有反向Shell功能,可以帮助广大研究人员提供强大的远程访问功能。该工具主要适用于渗透测试、HackTheBox挑战或CTF比赛等场景。
FB客服
2021/10/21
1.5K0
C代码中如何使用链接脚本中定义的变量?
https://sourceware.org/ml/binutils/2007-07/msg00154.html
韦东山
2020/09/30
4.1K0
Simulator 和 Emulator 的相同和不同;
在看模拟器的时候,出现了关于Simulator和Emulator两种词汇;都可以翻译为模拟器;但在调研游戏模拟器的时候,多为Emulator; 两者词汇的含义和应用场景有什么异同呢?
西湖醋鱼
2021/02/23
2K0
PHP分割两个数组的相同元素和不同元素的两种方法
一、举例说明 例如有两个数组A和B(当然这个A和B也可以是key=>value形式) A = array('tt','cc','dd','mm') B = array('ad','tt','cc','qq') 希望得到的结果是: sameArr = array('tt','cc') A = array('dd','mm') B = array('ad','qq') 二、解决方案 2.1、方法一:for循环取出数据 1、for循环一个A数组; 2、使用array_search判断元素是否存在B数组中; 3
蛋未明
2018/06/07
2.3K0
consul注册相同服务,相同程序,相同IP,不同端口来负载的问题
由于今天发现运维代码未正常发布。想要自己手动发布。发现原有服务名mos-x3-gls-service只有1个node启动,为了保障发布时原有服务不中断我需要再注册1个node,于是我简单修改了原有springboot端口9112为9113,启动后发现9113的节点正常注册,但是原来9112端口的节点服务没有了,搞了个寂寞。原因是如果在Spring Cloud Consul中使用相同的节点id进行注册,那么Consul将会将它们视为同一个节点,并将它们注册为同一个节点。老了,大意了。于是我把注册consul的节点id设置为服务名称+进程id即可解决。
高久峰
2023/06/17
5210
python 快速比较两个文件的不同
import difflib a = open('./1.txt', 'U').readlines() b = open('./2.txt', 'U').readlines() diff = difflib.ndiff(a, b) print(diff) for i in diff: print(i) # if i.startswith('+'): # print(i) #or print(set(b)-set(a))
周小董
2019/03/25
3.4K0
python判断两个文件是否相同
此方法相当于 Linux 系统下的diff,或者是 git 下的 checkout
机器学习和大数据挖掘
2019/07/02
2K0
Chrome插件:(NoFollow)自动标出带有nofollow的a链接
声明:本文由w3h5原创,转载请注明出处:《Chrome插件:(NoFollow)自动标出带有nofollow的a链接》 https://www.w3h5.com/post/214.html
德顺
2019/11/13
6760
Chrome插件:(NoFollow)自动标出带有nofollow的a链接
php 比较获取两个数组相同和不同元素的例子(交集和差集)
array_intersect()该函数比较两个(或更多个)数组的键值,并返回交集数组,该数组包括了所有在被比较的数组(array1)中,
用户8824291
2021/07/13
3.3K0
Shell 命令行求两个文件每行对比的相同内容
本文介绍了如何通过shell命令行进行两个文件之间的对比,包括使用cat命令、while循环、for循环以及grep命令等方法。通过这些方法,可以方便地求出两个文件中每行对比的相同内容,并输出结果。
FungLeo
2018/01/08
2.9K0
点击加载更多

相似问题

相同的源但是不同的二进制文件

12

包含带有GNU链接器脚本的二进制文件

31

两个不同脚本标记中的相同变量

60

使用不同PHP二进制文件的相同编写器脚本

10

对两个文件使用相同的链接器脚本文件目标

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文