如何在eclipse中不添加静态库路径的情况下解决函数的未定义错误(c,c++)

How to resolved undefined error to a function without adding static library path in eclipse(c,c++)

提问人:Dhaneesh lal.D.R 提问时间:4/7/2022 最后编辑:Dhaneesh lal.D.R 更新时间:4/8/2022 访问量:133

问:

我有一个函数,例如 在 path 中声明和定义。我从调用函数。编译后,返回错误。将静态库路径添加到 eclipse 后,它工作正常,但由于内存利用率问题,客户端希望删除所有静态库。add2num/dhaneesh/2021_pack/src/add2num/dhaneesh/new_pack/src/my_src.cundefined 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);
    .
    .
    .
}

注意:这是一个示例代码

C++ C Eclipse GCC 未定义引用

评论

0赞 codeling 4/7/2022
您声明两次,一次在 ,一次在 。别这样。另外,不要在这里使用关键字。包含就足够了。至于避免“未定义的引用”错误 - 对 eclipse 不太熟悉,但前提是 和 的结果链接到你的最终可执行文件,你不应该得到这个错误。它们在构建中的同一个“项目”中吗?add2nummy_src.hlist.cexternmy_src.hmy_src.clist.c
0赞 codeling 4/7/2022
详细说明为什么没有 extern 关键字:关于函数,它的用途是告诉编译器用其他语言编写的函数
0赞 user12002570 4/7/2022
不相关:函数中缺少 return 语句myFun
0赞 Dhaneesh lal.D.R 4/7/2022
感谢您的有效重播,我删除了 extern 关键字,但我仍然面临同样的错误,实际上 my_src.c 和 list.c 是一个主项目下的 2 个子项目。

答:

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.cmy_src.c