我有一个与硬件外围设备通信的嵌入式C静态库。它目前不支持多个硬件外围设备,但我需要连接到第二个。我不关心代码足迹。所以我想复制那个库;每个硬件一个。
这当然会导致符号冲突。一个好方法是使用objcopy为目标文件添加前缀。所以我可以得到hw1_fun1.o和hw2_fun1.o。这个post说明了这一点。
我想为源级别的所有c函数添加前缀,而不是对象。因为我需要为hw2稍微修改一下。
是否有任何脚本,c-preprocessor,工具可以做类似的东西:
./scriptme --prefix=hw2 ~/src/ ~/dest/
我将不胜感激:)
答案 0 :(得分:0)
我编写了一个简单的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 ;-)"