gcc --version-script无法识别int64_t

时间:2019-02-27 23:39:55

标签: c++ compilation

代码示例非常简单地说明了问题:

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

0 个答案:

没有答案