Jose Gutierrez de la Concha:
> Hi,
> 
> When building an Ice application with C++11/C++14 enabled you need to link
> with libraries with ++11 suffix -lIce++11 instead of -lIce.
> 
> libzeroc-ice3.6 provide C++98 libraries and C++11 libraries with ++11
> suffix and the APIs are slightly different.

I tried this (patch is attached), but this results in an error message
that the linker is unable to find -lIce++11:

---------------------------------------------------------------------

g++ -c -include release/murmurd -m64 -pipe -g -O2
-fdebug-prefix-map=/build/mumble-1.2.16/src/murmur=.
-fstack-protector-strong -Wformat -Werror=format-security -Wfatal-errors
-fvisibility=hidden -g -std=c++11 -O2 -Wall -W -D_REENTRANT
-DNO_UPDATE_CHECK -DPLUGIN_PATH=/usr/lib/mumble
-DMUMBLE_VERSION=1.2.16-1 -DHAVE_LIMITS_H -DHAVE_ENDIAN_H
-DRESTRICT=__restrict__ -D_FORTIFY_SOURCE=2
-DMUMBLE_VERSION_STRING=1.2.16 -DMURMUR -DUSE_DBUS -DUSE_ICE
-DUSE_BONJOUR -D_REENTRANT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_XML_LIB
-DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
-I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore
-I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtXml
-I/usr/include/qt4/QtSql -I/usr/include/qt4 -I/usr/include/qt4/QtDBus
-I../../src -I. -I/usr/include/speech-dispatcher -I../bonjour -Irelease
-I/usr/include/avahi-compat-libdns_sd -o release/moc_BonjourServer.o
release/moc_BonjourServer.cpp

g++ -m64 -Wl,-z,relro -Wl,-z,relro -Wl,-z,now -Wl,-O1 -o
../../release/murmurd release/ACL.o release/Group.o release/Channel.o
release/Connection.o release/User.o release/Timer.o release/CryptState.o
release/OSInfo.o release/Net.o release/SSL.o release/Version.o
release/main.o release/Server.o release/ServerUser.o release/ServerDB.o
release/Register.o release/Cert.o release/Messages.o release/Meta.o
release/RPC.o release/UnixMurmur.o release/DBus.o release/MurmurIce.o
release/BonjourServiceRegister.o release/BonjourServer.o
release/Mumble.pb.o release/Murmur.o release/moc_ACL.o
release/moc_Channel.o release/moc_Connection.o release/moc_Server.o
release/moc_ServerUser.o release/moc_Meta.o release/moc_UnixMurmur.o
release/moc_DBus.o release/moc_MurmurIce.o
release/moc_BonjourServiceRegister.o release/moc_BonjourServer.o
-L../../release -L/usr/lib/x86_64-linux-gnu -lprotobuf -lcap -lIce++11
-lIceUtil -lQtDBus -lssl -lcrypto -ldns_sd -lavahi-common -lavahi-client
-lpthread -lQtSql -lQtXml -lQtNetwork -lQtCore

/usr/bin/ld: cannot find -lIce++11

collect2: error: ld returned 1 exit status

Makefile.Release:183: recipe for target '../../release/murmurd' failed

make[4]: *** [../../release/murmurd] Error 1

---------------------------------------------------------------------

I had a quick look at the documentation for using Ice 3.6 concerning C++
and at the moment it doesn't mention using -lIce++11:


https://doc.zeroc.com/display/Ice36/Using+the+Linux+Binary+Distributions#UsingtheLinuxBinaryDistributions-C++

instead it's suggested to use -L/usr/lib/c++11 for 32-bit and
-L/usr/lib64/c++11 for 64-bit.  The Debian package seems to have this
directory in /usr/lib/x86_64-linux-gnu/c++11.  I tried adding that but
that doesn't seem to help (and I suspect this is redundant as
-L/usr/lib/x86_64-linux-gnu is included):

---------------------------------------------------------------------

g++ -c -include release/murmurd -m64 -pipe -g -O2
-fdebug-prefix-map=/build/mumble-1.2.16/src/murmur=.
-fstack-protector-strong -Wformat -Werror=format-security -Wfatal-errors
-fvisibility=hidden -g -std=c++11 -O2 -Wall -W -D_REENTRANT
-DNO_UPDATE_CHECK -DPLUGIN_PATH=/usr/lib/mumble
-DMUMBLE_VERSION=1.2.16-1 -DHAVE_LIMITS_H -DHAVE_ENDIAN_H
-DRESTRICT=__restrict__ -D_FORTIFY_SOURCE=2
-DMUMBLE_VERSION_STRING=1.2.16 -DMURMUR -DUSE_DBUS -DUSE_ICE
-DUSE_BONJOUR -D_REENTRANT -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_XML_LIB
-DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
-I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore
-I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtXml
-I/usr/include/qt4/QtSql -I/usr/include/qt4 -I/usr/include/qt4/QtDBus
-I../../src -I. -I/usr/include/speech-dispatcher -I../bonjour -Irelease
-I/usr/include/avahi-compat-libdns_sd -o release/moc_BonjourServer.o
release/moc_BonjourServer.cpp

g++ -m64 -Wl,-z,relro -Wl,-z,relro -Wl,-z,now -Wl,-O1 -o
../../release/murmurd release/ACL.o release/Group.o release/Channel.o
release/Connection.o release/User.o release/Timer.o release/CryptState.o
release/OSInfo.o release/Net.o release/SSL.o release/Version.o
release/main.o release/Server.o release/ServerUser.o release/ServerDB.o
release/Register.o release/Cert.o release/Messages.o release/Meta.o
release/RPC.o release/UnixMurmur.o release/DBus.o release/MurmurIce.o
release/BonjourServiceRegister.o release/BonjourServer.o
release/Mumble.pb.o release/Murmur.o release/moc_ACL.o
release/moc_Channel.o release/moc_Connection.o release/moc_Server.o
release/moc_ServerUser.o release/moc_Meta.o release/moc_UnixMurmur.o
release/moc_DBus.o release/moc_MurmurIce.o
release/moc_BonjourServiceRegister.o release/moc_BonjourServer.o
-L../../release -L/usr/lib/x86_64-linux-gnu -lprotobuf -lcap
-L/usr/lib/x86_64-linux-gnu/c++11 -lIce -lIceUtil -lQtDBus -lssl
-lcrypto -ldns_sd -lavahi-common -lavahi-client -lpthread -lQtSql
-lQtXml -lQtNetwork -lQtCore

release/Murmur.o: In function
`IceInternal::Cpp11FnCallbackNC::~Cpp11FnCallbackNC()':

/usr/include/Ice/Proxy.h:95: undefined reference to `vtable for
IceInternal::Cpp11FnCallbackNC'

---------------------------------------------------------------------

Any other suggestions?
Thanks

   -- Chris

-- 
Chris Knadle
chris.kna...@coredump.us
Description: Fix FTBFS bug with GCC 6
Author: Christiopher Knadle <chris.kna...@coredump.us>
Bugs-Debian: https://bugs.debian.org/831184
Last-Updated: 2016-07-31

--- a/src/murmur/murmur.pro
+++ b/src/murmur/murmur.pro
@@ -49,6 +49,7 @@
     LIBS *= -lcap
   }
 
+  QMAKE_CXXFLAGS *= -std=c++11
   HEADERS *= UnixMurmur.h
   SOURCES *= UnixMurmur.cpp
   TARGET = murmurd
@@ -93,7 +94,7 @@
 	win32:CONFIG(debug, debug|release) {
 		LIBS *= -lIceD -lIceUtilD
 	} else {
-		LIBS *= -lIce -lIceUtil
+		LIBS *= -L/usr/lib/x86_64-linux-gnu/c++11 -lIce -lIceUtil
 	}
 	DEFINES *= USE_ICE
 

Reply via email to