Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux gsoap&x2B+;链接错误_Linux_Gsoap - Fatal编程技术网

Linux gsoap&x2B+;链接错误

Linux gsoap&x2B+;链接错误,linux,gsoap,Linux,Gsoap,我用gsoap++库编写了一个soap客户端。一旦我把这个编译成一个独立的测试应用程序,它就编译得很好了,但是当我试图编译这些类时,包括在我的项目中,我得到了很多链接错误: ../common/UserGausClient/UserGausClient.o: In function `GAUS::SSLInit()': /home/milo/src/pinmoney/src/registrator/../common/UserGausClient/UserGausClient.h:11: und

我用gsoap++库编写了一个soap客户端。一旦我把这个编译成一个独立的测试应用程序,它就编译得很好了,但是当我试图编译这些类时,包括在我的项目中,我得到了很多链接错误:

../common/UserGausClient/UserGausClient.o: In function `GAUS::SSLInit()':
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/UserGausClient.h:11: undefined reference to `soap_ssl_init'
../common/UserGausClient/soapC.o: In function `soap_faultdetail':
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:117: undefined reference to `soap_malloc'
../common/UserGausClient/soapC.o: In function `soap_getelement':
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:152: undefined reference to `soap_peek_element'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:154: undefined reference to `soap_lookup_type'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:155: undefined reference to `soap_lookup_type'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:215: undefined reference to `soap_match_tag'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:219: undefined reference to `soap_match_tag'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:223: undefined reference to `soap_match_tag'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:227: undefined reference to `soap_match_tag'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:231: undefined reference to `soap_match_tag'
../common/UserGausClient/soapC.o:/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:235: more undefined references to `soap_match_tag' follow
../common/UserGausClient/soapC.o: In function `soap_ignore_element(soap*)':
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:333: undefined reference to `soap_peek_element'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:337: undefined reference to `soap_match_tag'
/home/milo/src/pinmoney/src/registrator/../common/UserGausClient/soapC.cpp:354: undefined reference to `soap_element_end_in'
../common/UserGausClient/soapC.o: In function `soap_class_id_enter(soap*, char const*, void*, int, unsigned int, char const*, char const*)':
等等。在代码块中。。。这是我的Makefile:

CC=g++
RM=rm
CFLAGS=-c -g -Wall -DWITH_OPENSSL
LDFLAGS=-lpcrecpp -lpq -lcryptopp -lprotobuf -lrt -lgsoapssl++ -lssl -lcrypto -L/usr/lib/ -L/usr/local/lib/ -lgsoap

SOURCES=../common/PgConnectionManager.cpp \
    ../common/RSADecryptor.cpp \
    ../common/RSAEncryptor.cpp \
    ../common/RSAKeyGenerator.cpp \
    ../common/RSAKeyLoaderBase.cpp \
    ../common/RSAManager.cpp \
    ../common/TcpServer.cpp \
    ../common/UserGausClient/UserGausClient.cpp \
    ../common/UserGausClient/soapC.cpp \
    ../common/UserGausClient/soapuserBindingProxy.cpp \
    ../proto/BalanceHistory.pb.cc \
    ../proto/Bio.pb.cc \
    ../proto/ClientRegistration.pb.cc \
    ../proto/EmployeePermissions.pb.cc \
    ../proto/OperatorAuthentication.pb.cc \
    ../proto/Passport.pb.cc \
    ../proto/Ping.pb.cc \
    ../proto/SearchForBill.pb.cc \
    ../proto/UpdateClientData.pb.cc \
    RequestDispatcher.cpp \
    SQLStorage.cpp \
    SessionManager.cpp \
    main.cpp \


OBJECTS_SEARCHER=$(SOURCES:.cpp=.o)
OBJECTS=$(OBJECTS_SEARCHER:.cc=.o)

SEARCHER=registrator
INCLUDE=-I ../ 

all: $(SEARCHER) 

$(SEARCHER): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@
clean:
    $(RM) -f $(OBJECTS)

.cpp.o:
    $(CC) $(CFLAGS) $(INCLUDE) $< -o $@

图书馆里也有。那么,这是个什么问题?

一个可能的原因是库被指定给链接器的顺序,一些链接器要求包含函数定义的库出现在需要它的对象或库之后。请尝试重新安排库定义,使其符合此处的情况,并检查您的链接器文档,以查看是否需要此功能。

我相信您必须编译gSoap的stdsoap2.*文件之一。生成的soapC文件取决于核心gSoap代码。

'stdsoap2.cpp'需要来自gSoap源目录


路径u到\u GSOAP\u BUILD/GSOAP-2.8/GSOAP/stdsoap2.cpp(假设为GSOAP-2.8)

想法不错,但是
找到stdsoap*
没有找到任何东西…:(它与gSoap一起提供。我看不到您的产品中有gSoap的路径。您不需要stdsoap2,因为您可以像在示例中那样链接到gSoap库:代码是用soapcalcProxy.cpp、soapC.cpp和stdsoap2.cpp编译和链接的(或使用libgsoap++.a)。我的测试应用程序使用这个类链接很好。有什么区别吗?我复制了/usr/include/gsoap/stdsoap2.cpp,一切都很好!谢谢!但唯一的问题是-当库存在时,为什么对象文件中的符号无法解析?我已经找到了,谢谢。这个文件必须是项目的一部分才能成功链接它。有些对于上述解决方案,我们需要在哪里复制stdsoap2.cpp文件?
$ nm /usr/lib/libgsoapssl++.a | grep soap_begin_count
00018da0 T soap_begin_count