/usr/bin/ld 找不到 -l<nameOfLibrary>
/usr/bin/ld cannot find -l<nameOfLibrary>
我写了一些程序,并尝试使用 g++ 编译它们,因此,
$ g++ minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp -L/usr/local/lib/ -lfwlib32 -lpthread -o adapter
我不断收到以下错误:
/usr/bin/ld: cannot find -lfwlib32
collect2: error: ld returned 1 exit status
fwlib32.h
是我要包含的库。共享对象文件 libfwlib32.so 存在于 /usr/local/lib
和 /usr/lib
中。但是我无法link。我已经尝试了类似问题提供的所有解决方案,包括
$ export LIBRARY_PATH=/usr/local/lib/
$ export LD_LIBRARY_PATH=/usr/local/lib
我也为/usr/lib
做了上面的操作,但还是一样的错误。
我已尝试在命令行中使用 -L 选项,但仍然出现错误。
我什至创建了一个名为 lib
的新文件夹,将 libfwlib32.so.1.0.1
粘贴到其中并 运行
$ ln -s ~/lib/libfwlib32.so.1.0.1 ~/lib/libfwlib32.so
在控制台上创建一个新的 .so 文件,并在命令行上将 ~/lib
作为 -L 选项的参数。没什么区别。我正处于撕裂我的头发的地步,所以任何帮助将不胜感激。
非常感谢!
错误消息表明 -lfwlib32 被解释为文件名而不是 -l
参数。将所有参数放在要编译的文件之前
g++ -m32 -L/usr/local/lib/ -lfwlib32 -lpthread -o adapter minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp
正如@Erik Johannessen 所指出的,libfwlib32.so 是一个 32 位库,因此您需要添加 -m32 来构建 32 位可执行文件。
请注意,指定 -L~/lib 将不起作用,因为 ~ 不会被 shell 扩展。此外,您不能在 -L 和 ~/lib 之间添加 space。相反,您必须将其指定为相对或绝对路径。
除了 libfwlib32.so.1.0.1 文件之外,您是否检查过 libfwlib32.so 符号链接是否存在于 /usr/local/lib(或 /usr/lib)中?
另一种可能是库的体系结构错误(即 32 位,而您的系统是 64 位),但是 ld 应该打印一条关于跳过不兼容库的消息。您可以通过 运行 'file libfwlib32.so.1.0.1'.
检查库的体系结构
您应该将 -l 选项放在最后,如:
$ g++ minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp -L/usr/local/lib/ -o adapter -lfwlib32 -lpthread
注意:请确保所有头文件和源文件都在同一个文件夹中。
我写了一些程序,并尝试使用 g++ 编译它们,因此,
$ g++ minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp -L/usr/local/lib/ -lfwlib32 -lpthread -o adapter
我不断收到以下错误:
/usr/bin/ld: cannot find -lfwlib32
collect2: error: ld returned 1 exit status
fwlib32.h
是我要包含的库。共享对象文件 libfwlib32.so 存在于 /usr/local/lib
和 /usr/lib
中。但是我无法link。我已经尝试了类似问题提供的所有解决方案,包括
$ export LIBRARY_PATH=/usr/local/lib/
$ export LD_LIBRARY_PATH=/usr/local/lib
我也为/usr/lib
做了上面的操作,但还是一样的错误。
我已尝试在命令行中使用 -L 选项,但仍然出现错误。
我什至创建了一个名为 lib
的新文件夹,将 libfwlib32.so.1.0.1
粘贴到其中并 运行
$ ln -s ~/lib/libfwlib32.so.1.0.1 ~/lib/libfwlib32.so
在控制台上创建一个新的 .so 文件,并在命令行上将 ~/lib
作为 -L 选项的参数。没什么区别。我正处于撕裂我的头发的地步,所以任何帮助将不胜感激。
非常感谢!
错误消息表明 -lfwlib32 被解释为文件名而不是 -l
参数。将所有参数放在要编译的文件之前
g++ -m32 -L/usr/local/lib/ -lfwlib32 -lpthread -o adapter minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp
正如@Erik Johannessen 所指出的,libfwlib32.so 是一个 32 位库,因此您需要添加 -m32 来构建 32 位可执行文件。
请注意,指定 -L~/lib 将不起作用,因为 ~ 不会被 shell 扩展。此外,您不能在 -L 和 ~/lib 之间添加 space。相反,您必须将其指定为相对或绝对路径。
除了 libfwlib32.so.1.0.1 文件之外,您是否检查过 libfwlib32.so 符号链接是否存在于 /usr/local/lib(或 /usr/lib)中?
另一种可能是库的体系结构错误(即 32 位,而您的系统是 64 位),但是 ld 应该打印一条关于跳过不兼容库的消息。您可以通过 运行 'file libfwlib32.so.1.0.1'.
检查库的体系结构您应该将 -l 选项放在最后,如:
$ g++ minIni.c device_datum.cpp fanuc_axis.cpp fanuc_path.cpp service.cpp condition.cpp cutting_tool.cpp string_buffer.cpp logger.cpp client.cpp server.cpp adapter.cpp fanuc_adapter.cpp FanucAdapter.cpp -L/usr/local/lib/ -o adapter -lfwlib32 -lpthread
注意:请确保所有头文件和源文件都在同一个文件夹中。