我有一个与硬件外设通信的嵌入式 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/