gpt4 book ai didi

c++ - 如何修复 : 'undefined reference to foo()' with Makefile and g++

转载 作者:行者123 更新时间:2023-11-28 04:13:02 26 4
gpt4 key购买 nike

我一直在尝试再次进入 C++,但在尝试编译时出现链接器错误:

main.cpp:(.text+0x92): 对`eval(std::string, double, double, double)' 的 undefined reference

我已经尝试过分别编译每个文件,然后手动链接,但它从来没有奏效。

我已经尝试过其他类似帖子提供的许多解决方案,但这些都不起作用,而且我不知道如何解决我的问题(这似乎并不难)

main.cpp :

#define _GLIBCXX_USE_CXX11_ABI 0

#include <iostream>
#include "functions.h"


int main()
{
std::string expression = "1/2+x";
double x = 1.45;
double y = 1.65;
double z = 1.77;

double result = 0.0;

result = eval(expression,x,y,z);

std::cout << result << std::endl;

return 0;
}

函数.cpp:

#include "functions.h" 

double eval(std::string expression_s, double x, double y, double z)
{
typedef exprtk::symbol_table<double> symbol_table_t;
typedef exprtk::expression<double> expression_t;
typedef exprtk::parser<double> parser_t;

symbol_table_t symbol_table0;
symbol_table_t symbol_table1;
symbol_table_t symbol_table2;

expression_t expression;
parser_t parser;

symbol_table0.add_variable("x",x);
symbol_table1.add_variable("y",y);
symbol_table2.add_variable("z",z);

expression.register_symbol_table(symbol_table0);
expression.register_symbol_table(symbol_table1);
expression.register_symbol_table(symbol_table2);

parser.compile(expression_s,expression);

std::cout << expression.value();

return expression.value();

}

函数.hpp :

ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED

#include "exprtk/exprtk.hpp"
#include <iostream>

double eval(std::string expression_s, double x, double y, double z);

#endif

生成文件:

CC = g++
EXEC = Crystal_MET
LIBS =
FLAGS =

all: main.o
$(CC) *.o -o $(EXEC) $(LIBS)

main.o : functions.o main.cpp functions.h
$(CC) main.cpp -c $(FLAGS)

functions.o : functions.cpp functions.h
$(CC) functions.cpp -c $(FLAGS)

clear :
rm -f *.o

mr_proper :
rm -f *.o $(EXEC)

最佳答案

main.cpp 是针对与 functions.cpp 不同的 ABI 编译的,因为:

#define _GLIBCXX_USE_CXX11_ABI 0

要么从 main.cpp 中删除该行,要么将其添加到 functions.cpp 中。

更多详情:https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html

关于c++ - 如何修复 : 'undefined reference to foo()' with Makefile and g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57251209/

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