gcc --version-script не может распознать int64_t - PullRequest
0 голосов
/ 28 февраля 2019

Примеры кода объясняют проблему довольно просто:

Hash.h

#include <iostream>
#include <cstdint>
using namespace std;

class Hash {
public:
    Hash(int64_t sz);
    int64_t size;
};

Hash.cpp

#include "Hash.h"

using namespace std;

Hash::Hash(int64_t sz) : size(sz)
{
    cout << "Hash int" << endl;
}

main.cpp

#include "Hash.h"

using namespace std;

int main(int argc, char *argv[]) 
{
    Hash HashTable(12);

    return 0;
}

А вот файл версии, foo.map:

VER_0.1
{
  global:
    extern "C++" {
        "Hash::Hash(int64_t)";
    };
  local:
    *;
};

Для компиляции:

$g++ -g -c -Wall -Werror -fpic Hash.cpp -std=c++0x
$g++ -shared -o Hash.so Hash.o -std=c++0x -Wl,--version-script=foo.map
$g++ -g -o prog Hash.so main.cpp -std=c++0x

Сообщение об ошибке:

/tmp/ccd60Ulm.o: In function `main':
/remote/ltg_engine1_us03/liangwa/test/004/main.cpp:7: undefined reference to `Hash::Hash(long)'
collect2: error: ld returned 1 exit status

Затем, если я изменю все int64_t на int или long, он скомпилируется нормально.Так что-нибудь особенное с int64_t?Я использую G ++ 7.3.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...