error: ld returned 1 exit status 和 error:undefined reference

undefined reference

往往是链接时出现错误,无法解析引用。这篇文章总结的很好undefined reference问题总结

error: ld returned 1 exit status

链接文件没有建立

案例

 1 #include<vector>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<cstdio>
 5 using namespace std;
 6 class Solution {
 7     static int** nv;
 8     static bool cmp(int x, int y){
 9         int lenx = nv[x][0];
10         int leny = nv[y][0];
11         for(int xi = lenx-1, yi = leny-1; xi > 0, yi > 0; xi--, yi--){
12             if(nv[x][xi] < nv[y][yi]) return true;
13             if(nv[x][xi] > nv[y][yi]) return false;
14         }
15         return false;
16     }
17 public:
18     vector<int> lexicalOrder(int n) {
19         nv = new int* [n+1];
20         for(int i = 1; i < n+1; i++){
21             nv[i] = new int[10];
22         }
23         for(int i = 1; i <= n; i ++){
24             int y = i;
25             int yi = 1;
26             while(y != 0){
27                 nv[i][yi++] = y % 10;
28                 y = y / 10;
29             }
30             nv[i][0] = yi;
31         }
32         vector<int> v;
33         for(int i = 1; i <= n; i ++){
34             v.push_back(i);
35         }
36         sort(v.begin(), v.end(), cmp);
37         return v;
38     }
39     // vector<int> lexicalOrderList(int start, int last, int s, int n, vector<int>& v){
40
41     // }
42
43 };
44 int main(){
45     Solution s;
46     vector<int> v = s.lexicalOrder(13);
47     for(int i = 0; i < v.size(); i ++){
48         cout << v[i] << " ";
49     }
50     cout << endl;
51     return 0;
52 }

编译:

错误在于没有对static成员变量在类外初始化,所以没有对static成员建立的链接文件。

ps:

  之所以要把cmp函数写成static,是因为cmp函数如果作为普通成员函数,自带一个this指针作为类指针的隐含参数,不能用于std::sort()函数。

参考文献:

  

成员函数隐含的this指针

vector排序问题<unresolved overloaded function type>

undefined reference问题总结

时间: 2025-01-13 21:20:47

error: ld returned 1 exit status 和 error:undefined reference的相关文章

自定义库引用时编译出错“collect2: error: ld returned 1 exit status”

想必很多人都遇到过这样的事情,需要写一个共享库,这个库又不能让所有的人都了解里面是怎么实现的,所以只能提供一个库出来供项目使用,可能是处于保密.核心业务的需要,这些都能够理解.笔者也写了一个简单的东西测试了一下,里面还是有不少东西. "collect2: error: ld returned 1 exit status"首先就遇到了这个问题.查了一下,这种错误网上说法也一大堆,起作用的还不多.在android系统里面加的共享库,需要加"namespace android &q

gcc/g++ 编译时出现:“对’xxxx’未定义的引用,collect2: error: ld returned 1 exit status” 的错误

出现的问题: 在使用 make 编译实现一个程序时,出现了下面的错误.查看程序源文件所在的目录时发现程序已经完成了编译,并生成了 list_repo.o 的文件,说明是在程序链接生成可执行文件时发生了问题. storages/local.o:在函数‘LocalStorage::init(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,

error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

Windows服务器Azure云编译安装MariaDB教程 www.111cn.net 编辑:future 来源:转载 安装MariaDB数据库最多用于linux系统中了,下文给各位介绍在Windows服务器Azure云编译安装MariaDB教程,希望本文能帮助到各位. 试用1元Windows Azure,带宽都是杠杠的.下面演示下Windows Azure下编译安装LNMP环境,系统环境是Ubuntu 14.04 TLS版 软件版本: 数据库:mariadb-10.0.13 Stable PH

php7 编译 collect2: error: ld returned 1 exit status

/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_strdup'/usr/bin/ld:note: 'ber_strdup' is defined in DSO /lib64/liblber-2.4.so.2 so try adding it to the linker command line/lib64/liblber-2.4.so.2:could not read symbols: Invalid

error: ld returned 1 exit status

[email protected]5437:~/Downloads/LBD_Descriptor/build$ cmake .. -- Configuring done -- Generating done -- Build files have been written to: /home/wj/Downloads/LBD_Descriptor/build [email protected]-Inspiron-5437:~/Downloads/LBD_Descriptor/build$ mak

QT编译出现ld.exe: cannot open output file debug\nh_03testCallPy.exe: Permission denied collect2.exe: error: ld returned 1 exit status

D:/Qt/Qt5.9.0/Tools/mingw530_32/bin/../lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld.exe: cannot open output file debug\nh_03testCallPy.exe: Permission denied collect2.exe: error: ld returned 1 exit status 原因目前可能有如下: 1.程序已经在运行,进入

linux下Qt问题cannot find -lGL collect2: error: ld returned 1 exit status

fedora下解决 yum groupinstall "Development Tools" yum install mesa-libGL-devel ubuntu下解决 sudo apt-get install libglu1-mesa-dev -y

linux下运行strlwr函数出错:ld returned 1 exit status

运行strlwr函数时报错,源程序如下: #include<stdio.h> #include<string.h> void main() { char s[10]={"CHINA"}; printf("%s\n",strlwr(s)); return 0; } 报错内容如下: eg6527a.c: In function 'main': eg6527a.c:8:2: warning: 'return' with a value, in fu

linux下执行strlwr函数出错:ld returned 1 exit status

执行strlwr函数时报错.源程序例如以下: #include<stdio.h> #include<string.h> void main() { char s[10]={"CHINA"}; printf("%s\n",strlwr(s)); return 0; } 报错内容例如以下: eg6527a.c: In function 'main': eg6527a.c:8:2: warning: 'return' with a value, i