提问人:Dhaneesh lal.D.R 提问时间:4/7/2022 最后编辑:Dhaneesh lal.D.R 更新时间:4/8/2022 访问量:133
如何在eclipse中不添加静态库路径的情况下解决函数的未定义错误(c,c++)
How to resolved undefined error to a function without adding static library path in eclipse(c,c++)
问:
我有一个函数,例如 在 path 中声明和定义。我从调用函数。编译后,返回错误。将静态库路径添加到 eclipse 后,它工作正常,但由于内存利用率问题,客户端希望删除所有静态库。add2num
/dhaneesh/2021_pack/src/
add2num
/dhaneesh/new_pack/src/my_src.c
undefined reference to 'add2num'
有没有办法在不添加静态库的情况下解决这个未定义的引用错误问题?
如果是,请帮我解决这个问题。
/dhaneesh/2021_pack/src/my_src.h
/* add2num declaration*/
int add2num(int num1,int num2);
/dhaneesh/2021_pack/src/my_src.c
#include "my_src.h"
.
.
/***Fun definition **/
int add2num(int num1,int num2)
{
return num1+num2;
}
/dhaneesh/new_pack/src/list.c
#include "my_src.h"
.
.
.
void myFun()
{
int a=10,b =20,sum=0;
sum = add2num(a,b);
printf("sum =%d\n",sum);
.
.
.
}
注意:这是一个示例代码
答:
1赞
user12002570
4/7/2022
#1
您的代码中存在几个问题。
问题 1
您使用错误的语法来调用函数。特别是,你错误地写了:add2num
sum = add2num(int a,int b); //this is not the right syntax to call function add2num
问题 2
函数中缺少 return 语句。myFun
此外,请注意,不需要 list.c 中的语句,因为您已经包含了已经具有函数声明的标头。extern int add2num(int num1,int num2);
删除所有这些问题后,修改后的代码如下所示:
my_src.h
#ifndef MYSRC_H
#define MYSRC_H
//declaration for add2num
int add2num(int num1,int num2);
#endif
my_src.c
#include "my_src.h"
/***Fun definition **/
int add2num(int num1,int num2)
{
return num1+num2;
}
my_list.h
#ifndef MYLIST_H
#define MYLIST_H
//declaration for myFun
int myFun();
#endif
my_list.c
#include "my_src.h"
#include "my_list.h"
#include <iostream>
//definition for myFun
int myFun()
{
int a=10,b =20,sum=0;
sum = add2num(a, b);
std::cout<<"sum: "<<sum<<std::endl;
return 5; //added this return statement
}
评论
0赞
Dhaneesh lal.D.R
4/8/2022
感谢您抽出宝贵时间,实际上mysrc.c,mysrc.h位于/dhaneesh/2021_pack/src/此文件夹下,my_list.c和我的list.h位于/dhaneesh/new_pack/src/文件夹下。使用静态库可以正常工作,但我想在不添加静态库的情况下消除未定义的引用错误,是否有可能
0赞
user12002570
4/8/2022
@Dhaneeshlal.D.R:不客气。你在使用CMake吗?你如何编译你的项目?我的意思是你使用哪个命令来构建你的项目。另外,您是否尝试过包含文件的完整路径。
0赞
Dhaneesh lal.D.R
4/8/2022
是的,我正在使用 CMake ,我也尝试过包含完整路径
0赞
user12002570
4/8/2022
@Dhaneeshlal.D.R好的,所以如果你使用的是CMake,那么你必须在构建项目时指定所有源文件(.cpp文件)。确保(如果尚未)在 CMakeLists.txt 中的文件列表中指定了文件。由于在您最初的问题中,您没有添加 CMake 文件,因此我们无法判断那里是否缺少任何内容。由于上述原因,您通常会遇到此类错误。my_list.c
my_src.c
评论
add2num
my_src.h
list.c
extern
my_src.h
my_src.c
list.c
myFun