使用 LLVM 16.0.4 编译 MiBench 中的 tiff-v3.5.4 时遇到编译链接错误

错误信息如下

复制代码
DEBUG: We are skipping bitcode generation because we did not see any input files.
AUDIT:LINKING /root/SVF/llvm-16.0.4.obj/bin/clang [-o fax2tiff -std=gnu89 -O0 -Xclang -optnone -g -fno-discard-value-names -w -I. -I../tools -I../libtiff fax2tiff.o ../libtiff/libtiff.a]
DEBUG:Calling execCmd(/root/SVF/llvm-16.0.4.obj/bin/clang, [-o fax2tiff -std=gnu89 -O0 -Xclang -optnone -g -fno-discard-value-names -w -I. -I../tools -I../libtiff fax2tiff.o ../libtiff/libtiff.a])
/opt/binutils/bin/ld: ../libtiff/libtiff.a(tif_luv.o): in function `L16toGry':
/root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:662:(.text+0x1ee9): undefined reference to `sqrt'
/opt/binutils/bin/ld: ../libtiff/libtiff.a(tif_luv.o): in function `pix24toXYZ':
/root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:747:(.text+0x20ed): undefined reference to `exp'
/opt/binutils/bin/ld: ../libtiff/libtiff.a(tif_luv.o): in function `XYZtoRGB24':
/root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:686:(.text+0x24c7): undefined reference to `sqrt'
/opt/binutils/bin/ld: /root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:687:(.text+0x2534): undefined reference to `sqrt'
/opt/binutils/bin/ld: /root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:688:(.text+0x25a2): undefined reference to `sqrt'
/opt/binutils/bin/ld: ../libtiff/libtiff.a(tif_luv.o): in function `pix16toY':
/root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:624:(.text+0x27c7): undefined reference to `exp'
/opt/binutils/bin/ld: ../libtiff/libtiff.a(tif_luv.o): in function `pix24fromXYZ':
/root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:774:(.text+0x39f6): undefined reference to `log'
/opt/binutils/bin/ld: ../libtiff/libtiff.a(tif_luv.o): in function `pix16fromY':
/root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:638:(.text+0x3e4c): undefined reference to `log'
/opt/binutils/bin/ld: /root/mibench-master/consumer/tiff-v3.5.4/libtiff/../libtiff/tif_luv.c:640:(.text+0x3eb3): undefined reference to `log'
clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
DEBUG:execCmd: /root/SVF/llvm-16.0.4.obj/bin/clang [-o fax2tiff -std=gnu89 -O0 -Xclang -optnone -g -fno-discard-value-names -w -I. -I../tools -I../libtiff fax2tiff.o ../libtiff/libtiff.a] had exitCode 1
DEBUG:execCmd: error was exit status 1
ERROR:Failed to compile using given arguments:
/root/SVF/llvm-16.0.4.obj/bin/clang [-o fax2tiff -std=gnu89 -O0 -Xclang -optnone -g -fno-discard-value-names -w -I. -I../tools -I../libtiff fax2tiff.o ../libtiff/libtiff.a]
exit status: exit status 1
DEBUG:Calling [gclang -o fax2tiff -std=gnu89 -O0 -Xclang -optnone -g -fno-discard-value-names -w -I. -I../tools -I../libtiff fax2tiff.o ../libtiff/libtiff.a] returned 1
make[1]: *** [Makefile:209:fax2tiff] 错误 1
make[1]: 离开目录"/root/mibench-master/consumer/tiff-v3.5.4/tools"
make: *** [Makefile:49:all] 错误 2

这是一个编译链接错误,主要问题是链接器找不到数学库中的函数(如sqrtexplog等)。

  • 错误类型:链接阶段未定义的引用(undefined reference)
  • 缺失的函数:sqrtexplog等数学函数
  • 问题原因:编译时没有链接数学库(libm
  • 解决方案:在编译命令中添加-lm选项来链接数学库

我的解决方案:

  1. 编辑mibench-master/consumer/tiff-v3.5.4/tools/Makefile

  2. 修改CFLAGS,在最后加上-lm

    COPTS = -std=gnu89 -O0 -Xclang -optnone -g -fno-discard-value-names -w
    OPTIMIZER=
    IPATH = -I. -I{SRCDIR} -I{LIBDIR}
    CFLAGS = {COPTS} {OPTIMIZER} ${IPATH} -lm

相关推荐
wdfk_prog5 小时前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
闻道且行之5 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
c238568 小时前
Bug 猎手入门指南
c++·算法·bug
玖玥拾10 小时前
C++ 数据结构 八大基础排序算法专题
数据结构·c++·算法·排序算法
YYYing.10 小时前
【C++大型项目之高性能服务器框架 (七) 】Socket与ByteArray模块
服务器·c++·后端·框架·高性能·c/c++
从零开始的代码生活_11 小时前
C++ list 原理与实践:双向链表、迭代器与简化实现
开发语言·c++·后端·学习·算法·链表·list
无相求码11 小时前
罪魁祸首:for 括号后面那个"隐形分号"
c语言
hy.z_77711 小时前
【C语言】11. 深入理解指针1
c语言·开发语言
charlie11451419111 小时前
现代C++工程实践——WeakPtr 第二关:核心骨架与控制块
开发语言·c++
2401_8697695911 小时前
内容9 string 1
c++