使用 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

相关推荐
凉、介几秒前
Armv8-A virtualization 笔记 (一)
c语言·笔记·学习·嵌入式·虚拟化·hypervisor
楼田莉子8 分钟前
仿Muduo的高并发服务器:LoopThread模块及其ThreadPool模块
linux·服务器·c++·后端·学习
盐焗鹌鹑蛋40 分钟前
【C++】模板进阶
c++
繁星蓝雨1 小时前
Qt多界面创建的优化问题(main函数或主界面中创建?)—————附带详细方法
c++·qt·架构·多界面管理
Cx330❀1 小时前
Qt 入门指南:从零搭建开发环境到第一个图形界面程序
xml·大数据·开发语言·网络·c++·人工智能·qt
蜡笔小马1 小时前
02.C++设计模式—建造者模式详解
c++
诙_1 小时前
深入理解C++设计模式
c++·设计模式
♛识尔如昼♛1 小时前
C 进阶(3) - 文件和目录
c语言·文件和目录
昵称小白1 小时前
C++ 刷题语法速查
c++·算法
Qt程序员2 小时前
【无标题】
linux·c++·消息队列·共享内存·c/c++·管道·信号量