Let GNU ld be less obscure about missing symbols and DSOs. If the BFD
object looks like a typical shared library, suggest adding '-l<foo>', where <foo> has the 'lib' prefix and '.so<bar>' or '.a' suffix removed. Otherwise, suggest adding '-l:<foo>', where <foo> is the full DT_SONAME. Submitted by: Conrad Meyer <conrad.meyer@isilon.com> Sponsored by: EMC / Isilon storage division Reviewed by: emaste PR: 194296 MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D1152
This commit is contained in:
parent
e3ef75f1ea
commit
2d764cca51
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=275386
@ -4356,9 +4356,38 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
||||
--no-add-needed is used. */
|
||||
if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0)
|
||||
{
|
||||
bfd_boolean looks_soish;
|
||||
const char *print_name;
|
||||
int print_len;
|
||||
size_t len, lend = 0;
|
||||
|
||||
looks_soish = FALSE;
|
||||
print_name = soname;
|
||||
print_len = strlen(soname);
|
||||
if (strncmp(soname, "lib", 3) == 0)
|
||||
{
|
||||
len = print_len;
|
||||
if (len > 5 && strcmp(soname + len - 2, ".a") == 0)
|
||||
lend = len - 5;
|
||||
else
|
||||
{
|
||||
while (len > 6 && (ISDIGIT(soname[len - 1]) ||
|
||||
soname[len - 1] == '.'))
|
||||
len--;
|
||||
if (strncmp(soname + len - 3, ".so", 3) == 0)
|
||||
lend = len - 6;
|
||||
}
|
||||
if (lend != 0)
|
||||
{
|
||||
print_name = soname + 3;
|
||||
print_len = lend;
|
||||
looks_soish = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
(*_bfd_error_handler)
|
||||
(_("%B: invalid DSO for symbol `%s' definition"),
|
||||
abfd, name);
|
||||
(_("undefined reference to symbol `%s' (try adding -l%s%.*s)"),
|
||||
name, looks_soish? "" : ":", print_len, print_name);
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
goto error_free_vers;
|
||||
}
|
||||
|
@ -2438,9 +2438,9 @@ msgstr ""
|
||||
msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B"
|
||||
msgstr ""
|
||||
|
||||
#: elflink.c:4309
|
||||
#: elflink.c:4389
|
||||
#, c-format
|
||||
msgid "%B: invalid DSO for symbol `%s' definition"
|
||||
msgid "undefined reference to symbol `%s' (try adding -l%s%.*s)"
|
||||
msgstr ""
|
||||
|
||||
#: elflink.c:5535
|
||||
|
Loading…
Reference in New Issue
Block a user