0

次のmake出力は未定義の参照を示していますが、何が原因かわかりません。誰か助けてもらえますか?

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/g/workspace/c_cpp/MongoDriverTest'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/mongodrivertest.exe
make[2]: Entering directory `/cygdrive/g/workspace/c_cpp/MongoDriverTest'
mkdir -p build/Debug/Cygwin_4.x-Windows
rm -f build/Debug/Cygwin_4.x-Windows/main.o.d
gcc -std=c99   -c -g -I../mongodb-mongo-c-driver/src/\*.c -MMD -MP -MF build/Debug/Cygwin_4.x-Windows/main.o.d -o build/Debug/Cygwin_4.x-Windows/main.o main.c
mkdir -p dist/Debug/Cygwin_4.x-Windows
gcc -std=c99    -o dist/Debug/Cygwin_4.x-Windows/mongodrivertest build/Debug/Cygwin_4.x-Windows/main.o  
nbproject/Makefile-Debug.mk:61: recipe for target `dist/Debug/Cygwin_4.x-Windows/mongodrivertest.exe' failed
make[2]: Leaving directory `/cygdrive/g/workspace/c_cpp/MongoDriverTest'
nbproject/Makefile-Debug.mk:58: recipe for target `.build-conf' failed
make[1]: Leaving directory `/cygdrive/g/workspace/c_cpp/MongoDriverTest'
nbproject/Makefile-impl.mk:39: recipe for target `.build-impl' failed
build/Debug/Cygwin_4.x-Windows/main.o: In function `main':
/cygdrive/g/workspace/c_cpp/MongoDriverTest/main.c:19: undefined reference to `_mongo_connect'
collect2: ld returned 1 exit status
make[2]: *** [dist/Debug/Cygwin_4.x-Windows/mongodrivertest.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

そして、これは私のmain.cの内容です:

#include <stdio.h>
#include <stdlib.h>
#include "../mongodb-mongo-c-driver/src/mongo.h"

int main(int argc, char** argv) {
    int status;
    mongo conn[1];

    status=mongo_connect(conn, "127.0.0.1", 27017);
    return EXIT_SUCCESS;
}  

2日前に動作していましたが、OSを再インストールしましたが、動作しなくなり、原因がわからないようです。mongo.hが存在し、mongo.oも存在します。mongo_connectはmongo.cにあります。何か案が?

4

1 に答える 1

4

リンクラインは次のとおりです。

gcc -std=c99 -o dist/Debug/Cygwin_4.x-Windows/mongodrivertest build/Debug/Cygwin_4.x-Windows/main.o  

どこから収集するかはGCCに通知されませんmongo_connect()。コマンドラインでMongoライブラリを指定する必要があります。

ソースコードにインクルード行がある場合:

#include "../mongodb-mongo-c-driver/src/mongo.h"

オプションを追加できます。

-L../mongodb-mongo-c-driver/lib -lmongo

リンクラインに。場所とライブラリ名はどちらも推測です。それは、指定されたディレクトリから、libmongo.dllまたはそれを取得します。libmongo.lib

../mongodb-mongo-c-driverディレクトリの下のどこかにライブラリが見つからない場合は、ライブラリをビルドしてインストールする必要があります。または、すでにインストールされている可能性があり、インストールされている正しい場所を参照していることを確認する必要があります。


また、原則として、ソースコードのようなパス名は避けてください。以下を指定する必要があります。

#include "mongo.h"

そして、それを探す場所を指定するためのコンパイル行オプションを提供します。

-I../mongodb-mongo-c-driver/src

参照:ヘッダーなどの相対パスの利点は何ですか?#include "../include/header.h"

于 2012-05-20T19:35:45.577 に答える