复制 SRC 目录并为所有 c 库函数添加前缀

标签 c preprocessor static-libraries prefix

我有一个与硬件外设通信的嵌入式 C 静态库。它目前不支持多个硬件外设,但我需要连接到第二个。我现在不关心代码足迹。所以我想复制那个库;每个硬件一个。

这当然会导致符号冲突。一个好的方法是使用 objcopy 为目标文件添加前缀。这样我就可以获得hw1_fun1.o和hw2_fun1.o。这个post说明了这一点。

我想在源级别上为所有 c 函数添加前缀,而不是对象。因为我需要对 hw2 进行一些修改。

是否有任何脚本、c 预处理器、工具可以制作如下内容:

./scriptme --prefix=hw2 ~/src/ ~/dest/

我将不胜感激:)

最佳答案

我编写了一个简单的 bash 脚本来执行所需的功能或某种功能。我希望有一天它能帮助别人。

#!/bin/sh

DIR_BIN=bin/ext/lwIP/
DIR_SRC=src/ext/lwIP/
DIR_DST=src/hw2_lwIP/
CMD_NM=mb-nm

[ -d $DIR_DST ] || ( echo "Destination directory does not exist!" && exit 1 );
cp -r $DIR_SRC/* $DIR_DST/
chmod -R 755 $DIR_DST # cygwin issue with Windows7
sync                  # file permissions. (Pure MS shit!)

funs=`find $DIR_BIN -name *.o | xargs $CMD_NM | grep " R \| T " | awk '{print $3}'`
echo "Found $(echo $funs | wc -w) functions, processing:"
for fun in $funs; 
do
    echo "  $fun";
    find $DIR_DST -type f -exec sed -i "s/$fun/hw2_$fun/g" {} \;
done;

echo "Done! Now change includes and compile your project ;-)"

关于复制 SRC 目录并为所有 c 库函数添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26845731/

相关文章:

c - 为什么无法绑定(bind)到指定IP地址的端口,但在localhost上却可以正常工作?

c - 桶排序+插入排序算法中的段错误

include - cpp : delay #include's until second pass

c++ - MSVC 列出静态 .lib 文件中的符号

c++ - 我怎样才能完成每个编译程序/动态库的对象的单个实例?

c - 为什么在C中copy chars时出现 "@"added

c - dup() 和缓存刷新

cmake:如何检查是否定义了预处理器

java - 针对不同版本的 Java 代码或预处理进行细微更改?

gcc - 如何从静态库输出 (.a) 中删除所有绝对路径