首页 > 解决方案 > 用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

标签: c++g++ld

解决方案


我猜你的错误信息,但在我自己尝试了你的代码之后,我认为你的问题是 ld 找不到你的库。库必须以前缀 命名lib。重命名hw.alibhw.a,它应该工作。


推荐阅读