【问题标题】:cgo undefined reference tocgo 未定义的引用
【发布时间】:2020-04-17 19:45:24
【问题描述】:

进入项目结构

src
  test.go
  testc/collection/linkedlist.h
  testc/collection/linkedlist.c

test.go

package main

// #cgo CFLAGS: -g -Wall
// #include <stdlib.h>
// #include "testc/collection/linkedlist.h"
import "C"

func main() {
  C.insertFirst(1,10);
  C.insertFirst(2,20);
  C.insertFirst(3,30);
  C.insertFirst(4,1);
  C.insertFirst(5,40);
  C.insertFirst(6,56);
  C.printList();
}

链表.h

#include <stdbool.h>

#ifndef TEST_LINKEDLIST_H
#define TEST_LINKEDLIST_H
struct node {
    int data;
    int key;
    struct node *next;
};

struct node * getHeader();
void printList();
void insertFirst(int key, int data);
struct node* deleteFirst();
bool isEmpty();
int length();
struct node* find(int key);
struct node* delete(int key);
void sort();
void reverse(struct node** head_ref);
//void testList();
#endif //TEST_LINKEDLIST_H

错误

# command-line-arguments
d:/gcc-9.2.0-no-debug/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: $WORK\b001\_x002.o: in function `_cgo_8b2a34aa27ef_Cfunc_insertFirst':
/tmp/go-build/cgo-gcc-prolog:62: undefined reference to `insertFirst'
d:/gcc-9.2.0-no-debug/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: $WORK\b001\_x002.o: in function `_cgo_8b2a34aa27ef_Cfunc_printList':
/tmp/go-build/cgo-gcc-prolog:74: undefined reference to `printList'
collect2.exe: error: ld returned 1 exit status
# command-line-arguments
cgo-gcc-prolog: In function '_cgo_8b2a34aa27ef_Cfunc_printList':
cgo-gcc-prolog:72:49: warning: unused variable '_cgo_a' [-Wunused-variable]

【问题讨论】:

  • 能否提供完整的源代码以重现错误?
  • 您找到解决方案了吗?

标签: go cgo


【解决方案1】:

您必须省略 testc 文件夹,因为它们在导入时位于同一路径中。 所以这个导入:

// #include "testc/collection/linkedlist.h"

将是:

// #include "collection/linkedlist.h"

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 2021-01-05
    • 2021-01-03
    • 2015-06-08
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2011-07-14
    相关资源
    最近更新 更多