我编写了一些程序,并尝试使用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
中。但我无法链接到它。我尝试过类似问题提供的所有解决方案,包括
$ 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选项的参数。它没有任何区别。我正在撕裂我的头发,所以任何帮助都将受到赞赏。
非常感谢!
答案 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
注意:请确保所有标题和源文件都在同一个文件夹中。
答案 1 :(得分:0)
错误消息表明-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位的可执行文件。
答案 2 :(得分:0)
请注意,指定-L~ / lib不会起作用,因为shell不会扩展〜。此外,您无法在-L和〜/ lib之间添加空格。相反,您必须将其指定为相对路径或绝对路径。
除了libfwlib32.so.1.0.1文件之外,您是否检查过/ usr / local / lib(或/ usr / lib)中是否存在libfwlib32.so符号链接?
另一种可能性是库是错误的架构(即32位而你的系统是64位),但是ld应该打印一条关于跳过不兼容库的消息。您可以通过运行文件libfwlib32.so.1.0.1'来检查库的体系结构。