2017-09-21 70 views
1

我目前正在嘗試使用C++創建Firebird數據庫。 Firebird安裝在我的電腦上。 我的程序如下所示:使用IBPP使用C++創建Firebird數據庫

#define IBPP_WINDOWS = true 
#define IBPP_GCC = true 

#include "ibpp.h" 
#include <fstream> 
#include <iostream> 
#include <sstream> 
#include <vector> 
#include <iostream> 
#include <stdlib.h> 
#include <sstream> 
#include <cmath> 

using namespace std; 
using std::vector; 
using std::string; 
using std::ifstream; 
using std::ofstream; 
using std::getline; 
using std::cin; 
using std::cout; 
using std::endl; 
using std::istringstream; 

int main(int argc, char *argv[]) 
{ 
    std::string UserName = "SYSDBA"; 
    std::string Password = "**********"; 
    std::string ServerName = "localhost"; 
    char* DbName = (char *)"C:/Users/**********/Desktop/**********.fdb"; 

    IBPP::Database db = IBPP::DatabaseFactory(ServerName,DbName,UserName,Password); 

    db->Create(); 
    db->Connect(); 

} 

當我嘗試編譯我的代碼,我得到以下信息:

C:\Users**********\AppData\Local\Temp\cc2Zhdj3.o:**********.cpp:(.text$_ZN4IBPP15DatabaseFactoryERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_[__ZN4IBPP15DatabaseFactoryERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_S7_S7_]+0xaa): undefined reference to `IBPP::DatabaseFactory(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)' collect2.exe: error: ld returned 1 exit status

有沒有人有一個想法,我做錯了什麼?

+1

[你很可能沒有將適當的庫鏈接到你的應用程序。](https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-和如何-DO-修復)。 – WhozCraig

回答

0

你可能下載並unzippped文件夾ibpp-2-5-3-1-src。在那裏你應該找到包含文件all_in_one.cpp的文件夾核心。 只需粘貼#include "C:\remaining_path\ibpp-2-5-3-1-src\core\all_in_one.cpp"即可在程序中包含此文件,您必須在其中插入文件(all_in_one.cpp)所在路徑的其餘部分。 您不必另外包含ibpp頭文件,因爲它已經通過all_in_one文件包含在內。

這將這樣的伎倆:)

順便說一句:沒關係一堆普拉斯在這裏逗你玩的。他們似乎是完全的奴隸,只是做了權威告訴他們的事情,從未學會爲自己思考。我猜他們只是嫉妒,所以我說:沒關係,你會去的地方!

1

正如WhozCraig指出的那樣,您可能未與Firebird共享庫鏈接。如果使用GCC,請嘗試添加鏈接選項-libpp,如果您使用的是MSVC,只需將IBPP .cpp文件添加到您的項目中,或創建一個靜態庫並與其鏈接即可。

+0

我在命令窗口中輸入了g ++ -libpp **********。cpp。現在我收到以下錯誤消息: file not recognized:File format not recognized collect2.exe:error:ld returned 1 exit status –

+0

嘗試拆分編譯和鏈接過程(例如'g ++ -c file.cpp -o file.o',然後'g ++ file.o -libpp -o final.exe') – vasek

+0

這應該如何工作? 當我編譯它沒有lib文件時,我總是得到一個錯誤消息,並沒有任何exe文件被創建... –

0

這是錯誤的:

#define IBPP_WINDOWS = true 

它應該是:

#define IBPP_WINDOWS