G ++链接-链接仅使用的符号

时间:2019-07-09 07:42:38

标签: c++ g++ shared-libraries ld dynamic-linking

将c ++代码与g ++链接时出现问题。我有两个文件:fileReader() { console.log("FileReader Called"); var fileInput = document.getElementById('file'); var fileDisplayArea = document.getElementById('source-container'); fileInput.addEventListener('change', function(e) { var file = fileInput.files[0]; var textType = /text.*/; if (file.type.match(textType)) { var reader = new FileReader(); reader.onload = function(e) { fileDisplayArea.innerText = reader.result; } reader.readAsText(file); } else { fileDisplayArea.innerText = "File not supported!"; } }); } file1

file2
file1:

int A(){
   return B();
}

int C(){
   return 0;
}

我正在构建使用file2: int B(){ return 4; } 函数的共享库,因此我仅使用C()而不是file1进行编译。编译或链接时没有问题,但是当我使用共享库时,执行时会收到错误消息,提示未定义file2

如果我编译并与B链接,则没有问题。但是我不想要这种解决方案,因为我有多个递归包含。

我尝试使用file2--ffunctions-sections进行编译,然后与--fdata-sections链接,但这并没有解决我的问题。

有没有一种方法可以仅链接我实际使用的符号(此处为函数)?

1 个答案:

答案 0 :(得分:0)

您应该将共享库视为通用的东西。即使您总是想从图书馆借书,其他人也可能想借其他书。因此,请删除方法int A()或通过链接到其依赖项使其起作用。

G ++提供了链接时优化(在编译和链接时使用参数-flto)。但是,使方法int A()无法访问,然后希望对其进行优化,绝对不是解决问题的干净方法。