g++不认识选项-wl。

5

我正在使用gcc版本为4.7.2的Ubuntu 12.10。

我尝试制作以下的makefile:

CC = g++
CCFLAGS = -fPIC -O3 -Wall -ffast-math -msse -msse2 -fopenmp
LINKFLAGS = -shared -Wl -fopenmp -lgomp

INPUT = im2col.cpp fastpool.cpp local_response_normalization.cpp neuron.cpp
TARGET = libcpputil.so

# If we are going to use MKL, we include additional flags
MKL_FLAGS = -D DECAF_USE_MKL
MKL_LINK_FLAGS = -lmkl_rt

all: $(INPUT)
    $(CC) -c $(CCFLAGS) $(INPUT)
    $(CC) $(LINKFLAGS) -o $(TARGET) *.o
all_mkl: $(INPUT)
    $(CC) -c $(CCFLAGS) $(MKL_FLAGS) $(INPUT)
    $(CC) $(LINKFLAGS) $(MKL_LINK_FLAGS) -o $(TARGET) *.o
speedtest_lrn: speedtest_lrn.cpp local_response_normalization.cpp
    $(CC) $(CCFLAGS) -lgomp -o speedtest_lrn speedtest_lrn.cpp local_response_normalization.cpp
clean:
    rm *.so
    rm *.o

但是不知道为什么g++无法识别-wl选项。下面是我得到的错误信息:

make -C layers/cpp/
make[1]: Entering directory `/home/ubuntu/decaf-release-master/decaf/layers/cpp'
g++ -c -fPIC -O3 -Wall -ffast-math -msse -msse2 -fopenmp im2col.cpp fastpool.cpp local_response_normalization.cpp neuron.cpp
g++ -shared -Wl -fopenmp -lgomp -o libcpputil.so *.o
g++: error: unrecognized command line option ‘-Wl’
make[1]: *** [all] Error 1
make[1]: Leaving directory `/home/ubuntu/decaf-release-master/decaf/layers/cpp'
make: *** [all] Error 2
Failed to build the C libraries; exiting

编辑:尝试移除“-wl”时出现以下错误:

ubuntu@ubuntu-VirtualBox:~/decaf-release-master$ python setup.py 
make -C layers/cpp/
make[1]: Entering directory `/home/ubuntu/decaf-release-master/decaf/layers/cpp'
g++ -c -fPIC -O3 -Wall -ffast-math -msse -msse2 -fopenmp im2col.cpp fastpool.cpp local_response_normalization.cpp neuron.cpp
g++ -shared -fopenmp -lgomp -o libcpputil.so *.o

make[1]: Leaving directory `/home/ubuntu/decaf-release-master/decaf/layers/cpp'
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup.py --help [cmd1 cmd2 ...]
   or: setup.py --help-commands
   or: setup.py cmd --help

error: no commands supplied

当我在Ubuntu 12.04和gcc 4.7.7上尝试时,它某种程度上是有效的。

有人能解释一下问题是什么以及如何解决吗?

谢谢, Gil。


我不记得曾经看到“-Wl”作为选项。它的意义是什么,为什么要传递它? - legends2k
1个回答

5

从手册中得知:

-Wl,option 将option作为选项传递给链接器。如果option包含逗号,则在逗号处将其拆分为多个选项。您可以使用此语法将参数传递给选项。例如, -Wl,-Map,output.map将-Map output.map传递给链接器。当使用GNU链接器时,您还可以通过-Wl,-Map=output.map获得相同的效果。

因此,您错过了-Wl的选项。


1
+1 很好知道;这是链接选项的链接,如果有人感兴趣的话。同样,-Wp,option用于预处理器,-Wa,option用于汇编器。 - legends2k
谢谢你的回答。我从下载的软件包中得到了这个makefile。直接删除-Wl是一样的吗? - GilLevi
尝试将其移除...如果它的表现不如预期,请回到这里 :) 我们会修复它! - Ferenc Deak
谢谢,我尝试删除它但没有成功,请查看我问题的编辑。 - GilLevi
嗯,第二个错误与make和gcc无关,而是与您尝试运行的软件包附带的setup.py有关。您的编译成功了。 - Ferenc Deak
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接