在 CentOS 7 上构建 C 项目,链接器不能使用 -ldl , -lc
Build C project on CentOS 7, the linker can't use -ldl , -lc
问题
我在本地 Ubuntu 机器上启动了一个 C 项目。在完成第一个版本后(建筑没问题),我决定将代码上传到运行 CentOS 7 的服务器以实现更多功能。
两边的代码和makefile是一样的。
但是在遥控器上构建的代码显示错误如下:
/usr/bin/ld: cannot find -ldl
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
构建工具和环境
- OS:centos7
- 工具链:gcc
我试图解决这个问题
yum install glibc-devel
但是没有用。
我应该如何解决这个问题?
编辑,我有一个解决方法
我发现我一周前写的makefile在LDFLAGS上有点奇怪,
LDFLAGS += -L$(LIBPATH)
LDFLAGS += -static -lxxx -lyyy -ldl
xxx和yyy是我需要的静态库名link.
我将 makefile 修改为
LDFLAGS += -L$(LIBPATH)
LDFLAGS += -l:libxxx.a -l:libyyy.a -ldl
现在可以正常使用了。
-static
需要 glibc-static
包,而不仅仅是 glibc-devel
。但是静态链接有很多限制(特别是与 dlopen
结合使用),您应该尽可能避免使用它。 (它在 Red Hat Enterprise Linux 上明确不受支持。)
问题
我在本地 Ubuntu 机器上启动了一个 C 项目。在完成第一个版本后(建筑没问题),我决定将代码上传到运行 CentOS 7 的服务器以实现更多功能。
两边的代码和makefile是一样的。
但是在遥控器上构建的代码显示错误如下:
/usr/bin/ld: cannot find -ldl
/usr/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
构建工具和环境
- OS:centos7
- 工具链:gcc
我试图解决这个问题
yum install glibc-devel
但是没有用。 我应该如何解决这个问题?
编辑,我有一个解决方法
我发现我一周前写的makefile在LDFLAGS上有点奇怪,
LDFLAGS += -L$(LIBPATH)
LDFLAGS += -static -lxxx -lyyy -ldl
xxx和yyy是我需要的静态库名link.
我将 makefile 修改为
LDFLAGS += -L$(LIBPATH)
LDFLAGS += -l:libxxx.a -l:libyyy.a -ldl
现在可以正常使用了。
-static
需要 glibc-static
包,而不仅仅是 glibc-devel
。但是静态链接有很多限制(特别是与 dlopen
结合使用),您应该尽可能避免使用它。 (它在 Red Hat Enterprise Linux 上明确不受支持。)