我想編譯odb附帶的「Hello World」示例。我正在使用debian Linux。odb「Hello World」鏈接產生「未定義的參考」
我複製了person.hxx和driver.cxx文件
// person.hxx
#ifndef person_hxx
#define person_hxx
#include <string>
#include <odb/core.hxx>
#pragma db object
class person
{
public:
person (const std::string& first,
const std::string& last,
unsigned short age);
const std::string& first() const;
const std::string& last() const;
unsigned short age() const;
void age (unsigned short);
private:
person() {}
friend class odb::access;
#pragma db id auto
unsigned long id_;
std::string first_;
std::string last_;
unsigned short age_;
};
#endif
// driver.cxx
#include <memory>
#include <iostream>
#include <odb/database.hxx>
#include <odb/transaction.hxx>
#include <odb/mysql/database.hxx>
#include "person.hxx"
#include "person-odb.hxx"
using namespace std;
using namespace odb::core;
int main (int argc, char * argv[])
{
try
{
auto_ptr<database> db (new odb::mysql::database (argc, argv));
unsigned long john_id,jane_id, joe_id;
{
person john("John","Doe", 33);
person jane ("Jane","Doe", 32);
person joe("Joe","Dirt",30);
transaction t (db -> begin());
john_id = db->persist(john);
jane_id = db->persist(jane);
joe_id = db->persist(joe);
t.commit();
}
}
catch (const odb::exception& e)
{
cerr << e.what() <<endl;
return 1;
}
}
driverthe ODB編譯器工作正常並製作人,ODB文件。
我編譯他們
g++ -c deiver.cxx
g++ -c person-odb.cxx
和一切順利。
的問題開始與鏈接階段
g++ driver.o person-odb.o -lodb-mysql -lodb -o driver
這reulted在
driver.cxx:(.text+0x14d): undefined reference to `person::person(std::string const&, std::string const&, unsigned short)'
你要麼不編譯也要鏈接'person.cpp',或者你不要定義構造函數person :: person'。鏈接器無法找到構造函數的目標代碼。 – vsoftco 2015-04-02 18:49:23
其中是person-odb.cxx?顯示給我們。該鏈接器抱怨說它不包含構造函數的代碼 – pm100 2015-04-02 18:52:58
該示例沒有person.cpp文件,只有一個名爲「person-odb.cpp」的文件,由odb編譯器 – 2015-04-02 18:53:12