私はそのバグをオンラインで検索しようとしましたが、すべての投稿はC++用です。
これはメッセージです:
test1.o:関数
ReadDictionary': /home/johnny/Desktop/haggai/test1.c:13: undefined reference to
CreateDictionary 'collect2で:エラー:ldが1つの終了ステータスを返しましたmake:*** [test1]エラー1
非常にシンプルなコードで、何が問題なのか理解できない
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dict.h"
#include "hash.h"
pHash ReadDictionary() {
/* This function reads a dictionary line by line from the standard input. */
pHash dictionary;
char entryLine[100] = "";
char *Word, *translation;
dictionary = CreateDictionary();
while (scanf("%s", entryLine) == 1) { // Not EOF
Word = strtok(entryLine, "=");
translation = strtok(NULL, "=");
AddTranslation(dictionary, Word, translation);
}
return dictionary;
}
int main() {
pHash dicti;
...
これがヘッダーdict.hです
#ifndef _DICT_H_
#define _DICT_H_
#include "hash.h"
pHash CreateDictionary();
...
#endif
ここにdict.cがあります
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "hash.h"
#include "dict.h"
pHash CreateDectionary()
{
pHash newDict;
newDict= HashCreate(650, HashWord, PrintEntry, CompareWords, GetEntryKey, DestroyEntry);
return newDict;
}
そして、あなたはhash.hをチェックしたい場合
#ifndef _HASH_H_
#define _HASH_H_
//type defintions//
typedef enum {FAIL = 0, SUCCESS} Result;
typedef enum {SAME = 0, DIFFERENT} CompResult;
typedef struct _Hash Hash, *pHash;
typedef void* pElement;
typedef void* pKey;
//function types//
typedef int (*HashFunc) (pKey key, int size);
typedef Result (*PrintFunc) (pElement element);
typedef CompResult (*CompareFunc) (pKey key1, pKey key2);
typedef pKey (*GetKeyFunc) (pElement element);
typedef void (*DestroyFunc)(pElement element);
...
//interface functions//
#endif
ここにファイルを入れておけばもっと簡単になるでしょうか?
とにかく、私は問題を理解する方法のヒントを喜んでいます
問題は、関数CreateD e ctionary()のタイプミスです。これをCreateD i ctionary()に変更する必要があります。 collect2:エラー:ldが1つの終了ステータスを返しました。これは、CとC++の両方で同じ問題です。通常、未解決のシンボルがあることを意味します。あなたの場合は、前述したタイプミスです。
これをインストールする
Sudo apt install libgl-dev libglu-dev libglib2.0-dev libsm-dev libxrender-dev libfontconfig1-dev libxext-dev
http://www.qtcentre.org/threads/69625-collect2-error-ld-returned-1-exit-status
ビルドの途中でコンパイルに失敗したために、このエラーが発生することがありました。試す最善の方法は、make cleanを実行し、コード全体を再度作成することです。
通常、この問題は、プログラムファイルで定義されていない関数を呼び出したときに発生したため、この問題を整理するには、プログラムファイルで定義されていない関数を呼び出したかどうかを確認します。
Dev C++を使用している場合は、.exe
またはプログラムが既に実行されていることを意味し、再度実行しようとしています。
プログラムをコンパイルするときは、dict.cも含める必要があります。例:
gcc -o test1 test1.c dict.c
さらに、dict.cにはCreateDictionary
の定義ミスがあり、CreateDectionary
(e
の代わりにi
)と表示されます。