C 中对“main”的未定义引用

2024-01-06

您好,我在使用 gcc 编译 c 代码时遇到以下错误

/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status

我正在尝试导入fftw()函数进入系统Verilog http://en.wikipedia.org/wiki/SystemVerilog。这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>
#include <fftw3.h> 

void fftw(double FFT_in[],int size)
{

    double *IFFT_out;
    int i;

    fftw_complex *middle;

    fftw_plan fft;
    fftw_plan ifft;
    middle = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*size);
    IFFT_out = (double *) malloc(size*sizeof(double));

    fft = fftw_plan_dft_r2c_1d(size, FFT_in, middle, FFTW_ESTIMATE);  //Setup fftw plan for fft (real 1D data)
    ifft = fftw_plan_dft_c2r_1d(size, middle, IFFT_out, FFTW_ESTIMATE);   //Setup fftw plan for ifft

    fftw_execute(fft);
    fftw_execute(ifft);

    printf("Input:    \tFFT_coefficient[i][0]      \tFFT_coefficient[i][1]   \tRecovered Output:\n");

    for(i=0;i<size;i++)
        printf("%f\t%f\t\t\t%f\t\t\t%f\n",FFT_in[i],middle[i][0],middle[i][1],IFFT_out[i]/size);

    fftw_destroy_plan(fft);
    fftw_destroy_plan(ifft);
    fftw_free(middle);
    free(IFFT_out);

    //return IFFT_out;
}

这是我尝试调用 fftw 的系统 Verilog 代码

module top;
import "DPI-C" function void fftw(real FFT_in[0:11], int size);
real j [0:11];
integer i,size;
real FFT_in [0:11]; 

initial begin
    size = 12;
    FFT_in[0] = 0.1;
     FFT_in[1] = 0.6;
     FFT_in[2] = 0.1;
     FFT_in[3] = 0.4;
     FFT_in[4] = 0.5;
     FFT_in[5] = 0.0;
     FFT_in[6] = 0.8;
     FFT_in[7] = 0.7;
     FFT_in[8] = 0.8;
     FFT_in[9] = 0.6;
     FFT_in[10] = 0.1;
     FFT_in[11] = 0.0;

    $display("Entering in SystemVerilog Initial Block\n");
    #20
     fftw(FFT_in,size);

    $display("Printing recovered output from system verilog\n"); 
    //for(i=0;i<size;i++)
        //$display("%f\t\n",(j[i])/size);

    $display("Exiting from SystemVerilog Initial Block");
    #5 $finish;

end

endmodule

这是编译 systemverilg 和 C 文件的 irun 命令

# Compile the SystemVerilog files
fftw_test.sv 
-access +rwc
# Generate a header file called _sv_export.h
-dpiheader _sv_export.h
# Delay compilation of fftw_test.c until after elaboration
#-cpost fftw_test_DPI.c -end
-I/home/fftw/local/include -L/home/ss69/fftw/local/lib fftw_test_DPI.c -lfftw3 -lm 
# Redirect output of ncsc_run to a log file called ncsc_run.log
-log_ncsc_run ncsc_run.log

运行此命令时出现以下错误: 构建库 run.so ld: /home/fftw/local/lib/libfftw3.a(mapflags.o): 创建共享对象时不能使用针对“.rodata”的重定位 R_X86_64_32;使用 -fPIC 重新编译 /homefftw/local/lib/libfftw3.a:无法读取符号:错误值 Collect2: ld 返回 1 退出状态 制作:*[/home/ss69/DPI/./INCA_libs/irun.lnx8664.12.20.nc/librun.so] 错误 1 ncsc_run: *E,TBBLDF: 无法构建测试库 /home/DPI/./INCA_libs/irun.lnx8664.12.20.nc/librun.so

irun: *E,CCERR: cc 编译期间出错(状态 1),退出。

当我只是尝试使用 gcc 使用以下命令编译 C 时:
gcc -g -Wall -Werror -I/home/fftw/local/include -L/home/ss69/fftw/local/lib \ fftw_test_DPI.c -lftw3 -lm -o fftw_test_DPI

我收到此错误:

/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64/crt1.o:在函数中_start': (.text+0x20): undefined reference to主要的' Collect2: ld 返回 1 退出状态


您具体如何使用该功能void fftw(double FFT_in[],int size)从您的评论来看,您正在编写被称为 DLL 或作为静态库的一部分的例程。

如果是这种情况,那么添加main()根本没有帮助。

如果您将其用作可调用例程,那么您所编写的内容绝对 100% 正确。

您可能需要做的就是将此例程编译到库中,甚至是静态库。可能没问题。如果是这种情况,请查阅 GCC 文档以了解如何创建静态或动态库。

最后,我自己编写了 Verilog 代码,因此您还可以提供您已阅读并遵循其说明的 Verilog 文档的任何行或参考。我假设在某个时候您正在调用 Verilog 并为其提供可以/应该使用的库列表。您的库应该包含在该列表中。

我包括来自的评论jxh根据他的要求: 要将函数导入 SystemVerilog,您需要将函数编译为共享对象。然后,您将 SystemVerilog 指向共享对象。 (我不使用 SystemVerilog,但这是我从其网页收集的信息。)

gcc -shared -fPIC -g -Wall -Werror \
-I/home/ss69/fftw/local/include -L/home/ss69/fftw/local/lib \
fftw_test_DPI.c -lfftw3 -lm -o libfftw_test_DPI.so
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中对“main”的未定义引用 的相关文章

  • Qt - QProcess 不工作

    我尝试启动 Internet Explorer 所以我使用下面的代码 QProcess process new QProcess this QString temp C Program Files Internet Explorer iex
  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 尝试了解使用服务打开对话框

    我已经阅读了有关使用 mvvm 模式打开对话框的讨论 我看过几个使用服务的示例 但我不明白所有部分如何组合在一起 我发布这个问题寻求指导 以了解我应该阅读哪些内容 以更好地理解我所缺少的内容 我将在下面发布我所拥有的内容 它确实有效 但从我
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • extern 声明和函数定义都在同一文件中

    我只是浏览了一下gcc源文件 在gcc c 我发现了类似的东西 extern int main int char int main int argc char argv 现在我的疑问是extern是告诉编译器特定的函数不在这个文件中 但可以
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 是否使用 C# 数据集? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对 C 中的数据集概念有点困惑 编码 ASP NET 站点 但这并不重要 在我的阅读中 我了解到它们 本质上 用作我的应用程序和我的
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • 审计跟踪和实施 SOX/HIPAA/等敏感数据的最佳实践

    我认为自己在应用程序设计方面相对熟练 但我从未接触过敏感数据 我一直想知道审计跟踪的最佳实践是什么以及应该如何实施它们 我现在不必这样做 但如果医疗公司要求我为他们做一些工作 能够自信地与他们交谈 那就太好了 假设我们有一个 学校 数据库
  • 在spring配置文件中设置资源

    我正在尝试在弹簧配置中配置推土机 当使用 xml 配置时 它会像
  • MPI 发送数组的数组

    好的 所以我尝试通过 MPI 发送这样的结构 struct BColumns double B int offset 如果我只是像这样对数据进行一些BS分配 bSet offset myRank bSet B double calloc 2
  • django 基于类的视图 - UpdateView - 如何在处理表单时访问请求用户?

    在 Django 的基于类的 UpdateView 中 我排除了用户字段 因为它是系统内部的 我不会要求它 现在将用户传递到表单的正确 Django 方法是什么 我现在的做法是将用户传递到init表单的 然后重写表单的 save 方法 但我
  • 更改 setup.py 中的输出目录

    我正在使用 setuptools 中的设置来创建setup py 我想知道是否可以以编程方式更改输出目录以将其更改为dist 我知道您可以使用以下命令从命令行执行此操作 dist dir标志 但我希望能够做到within the setup
  • 非公开 API 使用:应用程序包含一个或多个损坏的二进制文件

    我对 iOS 应用程序新版本上传的情况感到非常沮丧 这是故事 日期2018 年 1 月 25 日我们已经上传了新版本3 3 27 内部版本号 1 0 该过程已成功完成并可用于试飞 之后我们发现了一些问题并继续2018 年 1 月 26 日我
  • 如何根据屏幕密度(DPI大小)选择资源?

    我正在尝试根据我的颤振应用程序中的显示密度加载图标 如何根据屏幕密度动态加载 hdpi xhdpi xxhdpi 经过几个小时的搜索 根据官方文档 https flutter dev docs development ui assets a
  • 如何解决“错误的解释器:没有这样的文件或目录”

    我正在尝试运行sh脚本并在 Mac 上收到以下错误 usr bin perl M bad interpreter No such file or directory 我怎样才能解决这个问题 Remove M控制字符 perl i pe y
  • 根据 Angular 反应形式中选择的数字推送迭代行

    当我在下拉列表中选择一个数字时 我在迭代行时遇到问题 我将如何推动该数字 以便根据该数字迭代行 卡 我的流程是这样的 首先您必须将 Solo Traveler 选择为 否 以便出现成人和儿童下拉菜单 该下拉列表是我的问题 我将如何根据所选的
  • 使用 dplyr 与数据库中的日期字段进行数据库连接

    有什么魔力可以使用吗dplyr当数据库有日期字段时访问数据库 A dplyr tbl df将 mysql 日期时间字段转换为 chr 如果我能的话那也不错as Date 他们回来了 但如果我之前这样做collect ing 该表 我收到一个
  • Python Socket 接收/发送多线程

    我正在编写一个Python程序 在主线程中 我使用recv函数连续 循环 通过TCP套接字接收数据 在回调函数中 我使用 sendall 函数通过同一套接字发送数据 什么触发回调是无关紧要的 我已将套接字设置为阻塞 我的问题是 这样做安全吗
  • 从 jersey 迁移到 spring-mvc/rest:ContainerRequestFilter、ContainerResponseFilter

    由于业务需求 我需要从 jersey 迁移到 spring mvc rest 我正在 spring mvc 中搜索相当于 jersey 的东西ContainerRequestFilter ContainerResponseFilter 有任
  • 访问 Oracle Forms/OC4J 中的 URL 参数

    如何访问通过 URL 传递到 Oracle 表单的参数 例如给定网址 a form p1 某事 p2 其他 这将使用 cust 配置启动 a form 表单 但我无法了解如何 或者即使可能 访问p1 值为 something p2 值为 e
  • 如何在数据表中添加图像?

    如何在数据表中添加图像 我尝试了以下代码 Image img new Image img ImageUrl images xx png dr dt NewRow dr column imgdw 但它显示文字System Web UI Web
  • Python Rijndael 加密

    我正在尝试模仿 Rijndael AES 加密http www hanewin net encrypt aes aes test htm http www hanewin net encrypt aes aes test htm在Pytho
  • 会话锁定导致 ASP.Net 网站速度缓慢

    我刚刚发现 ASP Net Web 应用程序中的每个请求都会在请求开始时获取会话锁 然后在请求结束时释放它 如果您像我一开始一样不明白这其中的含义 那么这基本上意味着以下内容 任何时候 ASP Net 网页需要很长时间才能加载 可能是由于数
  • Play Framework 2.0.1 DateFormatter 接收系统区域设置

    我在 Play 2 0 Java 中编写了一个自定义 DateFormatter 因为默认的 DateFormatter 似乎是 i18n 不支持的 实现细节与此处无关 public class DateFormatter extends
  • C# 中用于语音认证的互相关和 FFT

    这是与其他问题类似的问题 但不是重复的问题 但是 我仍然无法得到正确的结果 我基本上试图记录两个 Wav 文件 1 基本文件 2 临时文件 然后将其转换为字节并传递给 Aforge FFT 然后传递给相关性 很少有混乱 当我录制文件时 我使
  • 从 TypeScript 声明全局命名空间变量

    如何从打字稿中显式声明全局命名空间中的变量 我需要编译器生成以下 JavaScript 代码 MyExtension someFunction 不幸的是 我只能让它生成 var MyExtension someFunction 这涉及到最新
  • C 中对“main”的未定义引用

    您好 我在使用 gcc 编译 c 代码时遇到以下错误 usr lib gcc x86 64 redhat linux 4 4 6 lib64 crt1 o In function start text 0x20 undefined refe