В моем случае, я использую только пару библиотек, а именно FMT и Spdlog. class = "lang-cpp prettyprint-override">
Код: Выделить всё
#define FMT_HEADER_ONLY
#define SPDLOG_FMT_EXTERNAL
#include
#include
int main(int argc, char* argv[]) {
fmt::print("Hello, {}!\n", "fmt");
spdlog::info("Hello, {}!", "spdlog");
return 0;
}
< /code>
Если я использую следующую команду, я получаю ожидаемый результат: < /p>
g++ test.cpp -o out -O3 -fuse-ld=gold -static \
ldd out \ # not a dynamic executable
./out # It prints the expected output
< /code>
Но, глядя на некоторые практики, чтобы уменьшить двоичный размер, и, поскольку это то, что делает оптимизированная сборка Bazel по умолчанию, я хотел бы передать флаг -GC-сечения < /code> линкер.g++ test.cpp -o out -O3 -fuse-ld=gold -Wl,-gc-sections -static
< /code>
Я получаю следующую ошибку: < /p>
/usr/lib/gcc/x86_64-pc-linux-gnu/15.1.1/../../../../lib/libc.a(pthread_create.o)(.note.stapsdt+0x14): error: relocation refers to local symbol ".text" [1], which is defined in a discarded section
/usr/lib/gcc/x86_64-pc-linux-gnu/15.1.1/../../../../lib/libc.a(pthread_create.o)(.note.stapsdt+0x74): error: relocation refers to local symbol ".text" [1], which is defined in a discarded section
collect2: error: ld returned 1 exit status
< /code>
Играет немного с разными комбинациями (пробуя разные линкеры, добавление и удаление флагов).-fuse-ldКод: Выделить всё
-Wl,-gc-sectionsдвоичный размер
bfd
yes
>22.2.0mfic /> bfd < /td>
no < /td>
2,5m
< /tr>
gold < /td>
yes < /td>
< /td>
< /td>
< /td>
< /td>
< /td>
< /td>
< /td>
< /td>
< /td>
/> Gold < /td>
NO < /td>
2.5m
< /td>
< /tbody>
< /table> < /div>
Итак, ясно, что я мог бы удалить флаг и все еще использовать линии золота или просто использовать другой ссылку. Я также мог бы просто отказаться от статического связывания всего. Это то, что я делаю не так, я что -то упускаю или это ошибка в золоте? (GNU Binutils) 2.44.0
[*] Linux 6.14.4-Arch1-2 #1 smp preempt_dynamic x86_64 Gnu/linux
[*] spdlog 1.15.2
[*] fmt 11.1.4
fmt 11.1.>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ons-option
Мобильная версия