c++ - 用ar编译归档,手动编译,ld找不到
问题描述
我已经编译了一个 hello world 库来测试我的构建设置:
// hw.cpp
#include<iostream>
#include"hw.h"
void hw(){ std::cout << "hw"<<std::endl; }
// hw.h
void hw();
// main.cpp
#include"hw.h"
int main(int argv, char ** argc){
hw();
return 0;
}
// BUILD COMMAND (ommitting proj directories, replacing with '.')
g++ -I. -o hw.o hw.cpp
// Archive Command
ar -rcs hw.a hw.o
// Compile (works as expected)
g++ -I. -o hw main.cpp hw.a
// Compile with ld
g++ -I. -L. -o hw main.cpp -lhw
结果是失败。我尝试过绝对路径,查看了 ld 文档;并且通常会花时间试图解决这个问题。
这里会发生什么?
确切的错误代码:
/usr/bin/ld: cannot find -lhw
collect2: error: ld returned 1 exit status
解决方案
我猜你的错误信息,但在我自己尝试了你的代码之后,我认为你的问题是 ld 找不到你的库。库必须以前缀 命名lib
。重命名hw.a
为libhw.a
,它应该工作。
推荐阅读
- c++ - 将信号量添加到 C++20 的基本原理是什么,而它被认为对 C++11 来说太危险了?
- java - 如何从 Spring Data JPA GROUP BY 查询返回对象列表而不是对象数组
- javascript - 将自定义对象返回给 GraphQL 解析器
- elastic-stack - logstash 向 elasticseach 集群发送数据的问题
- jsf - Primefaces获取排序列的名称
- reactjs - 使用 Iframe 将应用程序反应到受 IdentityServer4 保护的 MVC
- apache-spark - 如何从 spark rdd map 和 reduce 操作写入单个文件
- eclipse - 如何在 Eclipse RCP 应用程序 (Java) 中使用 Tycho 检索依赖项的许可证信息?
- android - 对话框片段在 API 23 及更低版本上被裁剪
- javascript - Javascript对象未推入数组