我用 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*)':
等等。在 Codeblocks 中它链接被罚款...这是我的 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 $@
我链接了所有必要的库 (-lgsoapssl++ -lssl -lcrypto
),并检查了这些库中的请求函数:
$ nm /usr/lib/libgsoapssl++.a | grep soap_begin_count
00018da0 T soap_begin_count
图书馆里有。那么,有什么问题吗?
最佳答案
我相信您必须在您的 make 中编译 gSoap 的一个 stdsoap2.* 文件。生成的 soapC 文件依赖于核心 gSoap 代码。
关于linux - gsoap++ 链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340524/