gpt4 book ai didi

c++ - 从外部目录链接库

转载 作者:行者123 更新时间:2023-11-28 07:46:51 24 4
gpt4 key购买 nike

编辑:我已经根据回答更新了我所做的更改。我正在尝试链接到我编写的一个小库,以了解这是用 C++ 完成的,但运气不好。 G++ 提示 undefined reference

我要链接的库的根目录在目录 ~/code/gklib/cxx/ 中。该目录结构如下:

~/code/gklib/cxx/
|
|`-> gk.{hh,cc}
|`-> libgk.o
|
`-> lib/
|
`-> libgk.a

我用 -c 标志编译了 gk.cc,然后用 将生成的目标文件转换为 .a 文件ar rvsc lib/libgk.a libgk.o.

此库的客户端位于文件夹 ~/code/cpp 中。在此目录中,我再次将 some_stuff.cc 编译为目标文件,然后我尝试使用以下命令链接到它:

$ cxx some_stuff.o -L../gklib/cxx/lib -lgk -o some_stuff

我收到这个错误:

some_stuff.o: In function `main':
some_stuff.cc:(.text+0x49): undefined reference to `void GK::algorithms::insertionSort<int, 5ul>(int*)'
collect2: error: ld returned 1 exit status

这些是这些文件的内容:

~/code/cpp/some_stuff.cc

#include <cstdlib>
#include <iostream>
#include <gk.hh>

using namespace std;

int main(int argc, char **argv) {
int i = -1;
int arr[5] = { 3, 4, 2, 1, 5 };
const size_t len = sizeof(arr)/sizeof(int);
GK::algorithms::insertionSort<int, len>(arr);
while(++i < 5)
cout << arr[i] << " ";
cout << endl;
exit(EXIT_SUCCESS);
}

~/code/gklib/cxx/gk.cc

#include "gk.hh"
template<class T, size_t len>
void GK::algorithms::insertionSort(T arr[len]){
// insertion sort
}

~/code/gklib/cxx/gk.hh

#pragma once
#include <cstdlib>

#define NAMESPACE(ns) namespace ns {
#define END_NAMESPACE(ns) }

NAMESPACE(GK)
NAMESPACE(algorithms)

template<class T, size_t len>
extern void insertionSort(T arr[len]);

END_NAMESPACE(algorithms)
END_NAMESPACE(GK)

我尝试了很多命令变体,但没有结果。互联网上到处都是教程和论坛,其中包含对我不起作用的说明。当所有内容都在一个文件中时,这段代码运行完美。我该如何解决这个问题?提前致谢。

最佳答案

我认为它更像:

cxx some_stuff.o -L$HOME/gklib/cxx/lib -B../gklib/cxx/lib -lgklib -o some_stuff

-lgklib,而不是 -Igklib(-I 选项指定包含文件夹)

但您必须通过 libgklib.a

重命名您的 gklib.a

也许你甚至可以删除-B../gklib/cxx/lib,试试吧:)

关于c++ - 从外部目录链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com