Compiling Issue on Debian Sid


#1

Hey, I’m attempting to compile panda 1.8.0 from source on debian sid. I’ve gotten almost all the kinks out, except there’s still one problem: the testbed portion fails with undefined references. It happens during this linking:

g++  -o Opt4-Linux/pview Opt4-Linux/pview_pview.o    -L../../metalibs/panda/Opt4-Linux -L../audio/Opt4-Linux -L../chan/Opt4-Linux -L../char/Opt4-Linux -L../collide/Opt4-Linux -L../cull/Opt4-Linux -L../device/Opt4-Linux -L../dgraph/Opt4-Linux -L../display/Opt4-Linux -L../downloader/Opt4-Linux -L../dxml/Opt4-Linux -L../event/Opt4-Linux -L../express/Opt4-Linux -L../framework/Opt4-Linux -L../gobj/Opt4-Linux -L../grutil/Opt4-Linux -L../gsgbase/Opt4-Linux -L../linmath/Opt4-Linux -L../mathutil/Opt4-Linux -L../movies/Opt4-Linux -L../nativenet/Opt4-Linux -L../net/Opt4-Linux -L../pandabase/Opt4-Linux -L../parametrics/Opt4-Linux -L../pgraph/Opt4-Linux -L../pgraphnodes/Opt4-Linux -L../pgui/Opt4-Linux -L../pipeline/Opt4-Linux -L../pnmimage/Opt4-Linux -L../pnmimagetypes/Opt4-Linux -L../pnmtext/Opt4-Linux -L../pstatclient/Opt4-Linux -L../putil/Opt4-Linux -L../recorder/Opt4-Linux -L../text/Opt4-Linux -L../tform/Opt4-Linux -L/usr/local/panda/lib -L/usr/local/panda/lib -L/usr/lib -L/usr/lib -L/usr/lib/i386-linux-gnu -L/usr/lib/i386-linux-gnu -L/usr/lib -L/usr/lib/i386-linux-gnu -L/lib -L/usr/lib -L/usr/lib -L/usr/lib -lp3framework -lp3putil -lp3collide -lp3pgraph -lp3chan -lp3text -lp3pnmimage -lp3pnmimagetypes -lp3pnmtext -lp3event -lp3gobj -lp3display -lp3mathutil -lp3express -lp3dgraph -lp3device -lp3tform -lp3linmath -lp3pstatclient -lpanda -lp3recorder -lp3pgui -lp3char -lp3pipeline -lp3pandabase -lp3gsgbase -lp3downloader -lp3parametrics -lp3pgraphnodes -lp3cull -lp3grutil -lp3net -lp3movies -lp3nativenet -lp3audio -lp3dxml -lp3interrogatedb -lp3prc -lp3dconfig -lp3dtoolutil -lp3dtoolbase -lp3pystub -lm -ldl -lCg -lfreetype -lz -ljpeg -lpng12 -ltiff -lssl -lcrypto -ltar -lpthread  
../pgraph/Opt4-Linux/libp3pgraph.so: undefined reference to `Dtool_TransformState'
../putil/Opt4-Linux/libp3putil.so: undefined reference to `Dtool_TypedObject'
../pgraph/Opt4-Linux/libp3pgraph.so: undefined reference to `Dtool_PandaNode'
../pgraph/Opt4-Linux/libp3pgraph.so: undefined reference to `Dtool_BamReader'
../pgraph/Opt4-Linux/libp3pgraph.so: undefined reference to `Dtool_NodePath'
../pgraph/Opt4-Linux/libp3pgraph.so: undefined reference to `Dtool_RenderState'
../event/Opt4-Linux/libp3event.so: undefined reference to `Dtool_TypedReferenceCount'
../putil/Opt4-Linux/libp3putil.so: undefined reference to `Dtool_BamWriter'
../display/Opt4-Linux/libp3display.so: undefined reference to `Dtool_Texture'
collect2: ld returned 1 exit status
make[1]: *** [Opt4-Linux/pview] Error 1
make[1]: Leaving directory `/home/blahblah/panda3d-1.8.0/panda/src/testbed'
make: *** [testbed] Error 2

I’m using ppremake to build. If I “make -k” the build finishes off with testbed being the only failed portion. Attempting to compile and link the “Panda Hello World” program gives link errors about the same and similar undefined references to Dtool_* things.

Thoughts? Suggestions? Obvious things I’m overlooking? Thanks in advance!

(Also, let me know if there’s any more info you need.)


#2

Hi, welcome to the forums. Could you show your Config.pp, or perhaps the generated dtool_config.h, so we can see which options are being compiled in?


#3

Here’s dtool_config.h. I’m posting it because my Config.pp is still full of all the comments that are in the default one and is really long, but I can provide it if you need me to.
I don’t know if this has anything to do with my problem, but there are some libraries, namely png, tiff, openssl, fftw, Xrandr, and Xcursor, that are on my computer and I know exactly where the include files and lib files are for them, but I am unable to convince ppremake that they are, in fact, present.

/* dtool_config.h.  Generated automatically by ppremake from Sources.pp. */
/* Debug / non-debug symbols.  OPTIMIZE = 4 */
#undef _DEBUG
#define NDEBUG 1
/* Define if we have Eigen available. */
#define HAVE_EIGEN 1
#define LINMATH_ALIGN 1
/* Define if we have Python installed.  */
#define HAVE_PYTHON /usr/include/python2.7
#undef USE_DEBUG_PYTHON
/* Define if we have Python as a framework (Mac OS X).  */
#undef PYTHON_FRAMEWORK
/* Define if we have RAD game tools, Miles Sound System installed.  */
#undef HAVE_RAD_MSS
/* Define if we have FMODex installed. */
#define HAVE_FMODEX /usr/local/lib/libfmodexL-4.34.20.so
/* Define if we have OpenAL installed. */
#undef HAVE_OPENAL
/* Define if we have Freetype 2.0 or better available. */
#define HAVE_FREETYPE /usr/bin/freetype-config
/* Define if we are using SpeedTree. */
#undef HAVE_SPEEDTREE
/* Define if we want to compile in a default font. */
#define COMPILE_IN_DEFAULT_FONT 1
/* Define to use doubles for most numbers, intead of single-precision floats. */
#undef STDFLOAT_DOUBLE
/* Define if we have Maya available. */
#undef HAVE_MAYA
#undef MAYA_PRE_5_0
/* Define if we have libRocket available and built with Python support. */
#undef HAVE_ROCKET_PYTHON
/* Define if we have SoftImage available. */
#undef HAVE_SOFTIMAGE
/* Define if we have FCollada available. */
#undef HAVE_FCOLLADA
/* Define if we have ARToolKit available. */
#undef HAVE_ARTOOLKIT
/* Define if we have OpenSSL installed.  */
#undef HAVE_OPENSSL
#undef REPORT_OPENSSL_ERRORS
/* Define if we have libjpeg installed.  */
#define HAVE_JPEG /usr/lib/i386-linux-gnu/libjpeg.a
#undef PHAVE_JPEGINT_H
/* Define to build video-for-linux. */
#define HAVE_VIDEO4LINUX 1
/* Define if we have libpng installed.  */
#undef HAVE_PNG
/* Define if we have libtiff installed.  */
#undef HAVE_TIFF
/* Define if we want to build these other image file formats. */
#define HAVE_SGI_RGB 1
#define HAVE_TGA 1
#define HAVE_IMG 1
#define HAVE_SOFTIMAGE_PIC 1
#define HAVE_BMP 1
#define HAVE_PNM 1
/* Define if we have libtar installed.  */
#define HAVE_TAR /usr/lib/libtar.a
/* Define if we have libfftw installed.  */
#undef HAVE_FFTW
/* Define if we have libsquish installed.  */
#undef HAVE_SQUISH
/* Define if we have Berkeley DB installed.  */
#undef HAVE_BDB
/* Define if we have VRPN installed.  */
#undef HAVE_VRPN
/* Define if we have HELIX installed.  */
#undef HAVE_HELIX
/* Define if we have CG installed.  */
#define HAVE_CG /usr/lib/libCg.so
/* Define if we have CGGL installed.  */
#define HAVE_CGGL /usr/lib/libCgGL.so
/* Define if we have CGDX8 installed.  */
#undef HAVE_CGDX8
/* Define if we have CGDX9 installed.  */
#undef HAVE_CGDX9
/* Define if we have CGDX10 installed.  */
#undef HAVE_CGDX10
/* Define for dxerr.h instead of dxerr9.h. */
#undef USE_GENERIC_DXERR_LIBRARY
/* Define if we have zlib installed.  */
#define HAVE_ZLIB /usr/lib/i386-linux-gnu/libz.a
/* Define if we have OpenGL installed and want to build for GL.  */
#define HAVE_GL /usr/lib/i386-linux-gnu/libGL.so
# define MIN_GL_VERSION_MAJOR 1
# define MIN_GL_VERSION_MINOR 1
/* Define if we have OpenGL ES installed and want to build for GLES. */
#undef HAVE_GLES
/* Define if we have OpenGL ES installed and want to build for GLES2. */
#undef HAVE_GLES2
/* Define if we have OpenCV installed and want to build for OpenCV.  */
#define HAVE_OPENCV /usr/lib/libopencv_highgui.a
/* Define if we have FFMPEG installed and want to build for FFMPEG.  */
#undef HAVE_FFMPEG
#define HAVE_SWSCALE 1
/* Define if we have ODE installed and want to build for ODE.  */
#define HAVE_ODE /usr/lib/libode.a
/* Define if we have AWESOMIUM installed and want to build for AWESOMIUM.  */
#undef HAVE_AWESOMIUM
/* Define if we have Mesa installed and want to build mesadisplay.  */
#undef HAVE_MESA
#undef MESA_MGL
# define MIN_MESA_VERSION_MAJOR 1
# define MIN_MESA_VERSION_MINOR 1
/* Define if we have GLX installed and want to build for GLX.  */
#define HAVE_GLX /usr/lib/i386-linux-gnu/libX11.a
/* Define if we have EGL installed and want to build for EGL.  */
#undef HAVE_EGL
/* Define if we have Windows-GL installed and want to build for Wgl.  */
#undef HAVE_WGL
/* Define if we have DirectX installed and want to build for DX.  */
#undef HAVE_DX8
/* Define if we have DirectX installed and want to build for DX.  */
#undef HAVE_DX9
/* The choice of generic vs. the specific dxerr library largely
   depends on which SDK you have installed. */
#undef USE_GENERIC_DXERR_LIBRARY
/* Define if we want to build tinydisplay. */
#undef HAVE_TINYDISPLAY
/* Define if we have the SDL library. */
#undef HAVE_SDL
/* Define if we have X11. */
#define HAVE_X11 /usr/lib/i386-linux-gnu/libX11.a
/* Define if we have the XFree86-DGA extension. */
#define HAVE_XF86DGA /usr/lib/libXxf86dga.a
/* Define if we have the XRandR extension. */
#undef HAVE_XRANDR
/* Define if we have the XCursor extension. */
#undef HAVE_XCURSOR
/* Define if we want to compile the threading code.  */
#define HAVE_THREADS 1
/* Define if we want to use fast, user-space simulated threads.  */
#undef SIMPLE_THREADS
/* Define if SIMPLE_THREADS should be implemented with the OS-provided
   threading layer (if available). */
#define OS_SIMPLE_THREADS 1
/* Define to enable deadlock detection, mutex recursion checks, etc. */
#undef DEBUG_THREADS
/* Define to implement mutexes and condition variables via a user-space spinlock. */
#undef MUTEX_SPINLOCK
/* Define to enable the PandaFileStream implementation of pfstream etc. */
#define USE_PANDAFILESTREAM 1
/* Define if we want to compile the net code.  */
#define HAVE_NET 1
/* Define if we want to compile the egg code.  */
#define HAVE_EGG 1
/* Define if we want to compile the audio code.  */
#define HAVE_AUDIO 1
/* Define if we have bison and flex available. */
#undef HAVE_BISON
/* Define if we want to use PStats.  */
#undef DO_PSTATS
/* Define if we want to type-check downcasts.  */
#undef DO_DCAST
/* Define if we want to provide collision system recording and
   visualization tools. */
#undef DO_COLLISION_RECORDING
/* Define if we want to enable track-memory-usage.  */
#undef DO_MEMORY_USAGE
/* Define if we want to enable min-lag and max-lag.  */
#undef SIMULATE_NETWORK_DELAY
/* Define if we want to allow immediate mode OpenGL rendering.  */
#undef SUPPORT_IMMEDIATE_MODE
/* Define for either of the alternative malloc schemes. */
#undef USE_MEMORY_DLMALLOC
#undef USE_MEMORY_PTMALLOC2
/* Define if we want to compile in support for pipelining.  */
#define DO_PIPELINING 1
/* Define if we want to keep Notify debug messages around, or undefine
   to compile them out.  */
#undef NOTIFY_DEBUG
/* Define if we want to export template classes from the DLL.  Only
   makes sense to MSVC++. */
#define EXPORT_TEMPLATES yes
/* Define if we are linking PANDAPHYSX in with PANDA. */
#undef LINK_IN_PHYSX
/* The compiled-in character(s) to expect to separate different
   components of a path list (e.g. $PRC_PATH). */
# define DEFAULT_PATHSEP ":"
/* Many of the prc variables are exported by
   dtool/src/prc/prc_parameters.h.pp, instead of here.  Only those prc
   variables that must be visible outside of the prc directory are
   exported here. */
/* The filename that specifies the public keys to import into
   config. */
# define PRC_PUBLIC_KEYS_FILENAME ""
/* Define if you want to save the descriptions for ConfigVariables. */
#undef PRC_SAVE_DESCRIPTIONS
/* Define if your processor stores words with the most significant
   byte first (like Motorola and SPARC, unlike Intel and VAX).  */
#undef WORDS_BIGENDIAN
/* Define if the C++ compiler uses namespaces.  */
#define HAVE_NAMESPACE 1
/* Define if fstream::open() accepts a third parameter for umask. */
#undef HAVE_OPEN_MASK
/* Define if some header file defines wchar_t. */
#define HAVE_WCHAR_T 1
/* Define if the <string> header file defines wstring. */
#define HAVE_WSTRING 1
/* Define if the C++ compiler supports the typename keyword.  */
#define HAVE_TYPENAME 1
/* Define if we can trust the compiler not to insert extra bytes in
   structs between base structs and derived structs. */
#undef SIMPLE_STRUCT_POINTERS
/* Define if we have Dinkumware STL installed.  */
#undef HAVE_DINKUM
/* Define if we have STL hash_map etc. available  */
#undef HAVE_STL_HASH
/* Define if we have a gettimeofday() function. */
#define HAVE_GETTIMEOFDAY 1
/* Define if gettimeofday() takes only one parameter. */
#undef GETTIMEOFDAY_ONE_PARAM
/* Define if you have the getopt function.  */
#define HAVE_GETOPT 1
/* Define if you have the getopt_long_only function.  */
#define HAVE_GETOPT_LONG_ONLY 1
/* Define if getopt appears in getopt.h.  */
#define PHAVE_GETOPT_H 1
/* Define if you have ioctl(TIOCGWINSZ) to determine terminal width. */
#define IOCTL_TERMINAL_WIDTH 1
/* Do the system headers define a "streamsize" typedef? */
#define HAVE_STREAMSIZE 1
/* Do the system headers define key ios typedefs like ios::openmode
   and ios::fmtflags? */
#define HAVE_IOS_TYPEDEFS 1
/* Define if the C++ iostream library defines ios::binary.  */
#define HAVE_IOS_BINARY 1
/* Can we safely call getenv() at static init time? */
#define STATIC_INIT_GETENV 1
/* Can we read the file /proc/self/[*] to determine our
   environment variables at static init time? */
#define HAVE_PROC_SELF_EXE 1
#define HAVE_PROC_SELF_MAPS 1
#define HAVE_PROC_SELF_ENVIRON 1
#define HAVE_PROC_SELF_CMDLINE 1
#undef HAVE_PROC_CURPROC_FILE
#undef HAVE_PROC_CURPROC_MAP
#undef HAVE_PROC_CURPROC_CMDLINE
/* Do we have a global pair of argc/argv variables that we can read at
   static init time?  Should we prototype them?  What are they called? */
#undef HAVE_GLOBAL_ARGV
#undef PROTOTYPE_GLOBAL_ARGV
#undef GLOBAL_ARGV
#undef GLOBAL_ARGC
/* Define if you have the <io.h> header file.  */
#undef PHAVE_IO_H
/* Define if you have the <iostream> header file.  */
#define PHAVE_IOSTREAM 1
/* Define if you have the <malloc.h> header file.  */
#define PHAVE_MALLOC_H 1
/* Define if you have the <sys/malloc.h> header file.  */
#undef PHAVE_SYS_MALLOC_H
/* Define if you have the <alloca.h> header file.  */
#define PHAVE_ALLOCA_H 1
/* Define if you have the <locale.h> header file.  */
#define PHAVE_LOCALE_H 1
/* Define if you have the <string.h> header file.  */
#define PHAVE_STRING_H 1
/* Define if you have the <stdlib.h> header file.  */
#define PHAVE_STDLIB_H 1
/* Define if you have the <limits.h> header file.  */
#define PHAVE_LIMITS_H 1
/* Define if you have the <minmax.h> header file.  */
#undef PHAVE_MINMAX_H
/* Define if you have the <sstream> header file.  */
#define PHAVE_SSTREAM 1
/* Define if you have the <new> header file.  */
#define PHAVE_NEW 1
/* Define if you have the <sys/types.h> header file.  */
#define PHAVE_SYS_TYPES_H 1
/* Define if you have the <sys/time.h> header file.  */
#define PHAVE_SYS_TIME_H 1
/* Define if you have the <unistd.h> header file.  */
#define PHAVE_UNISTD_H 1
/* Define if you have the <utime.h> header file.  */
#define PHAVE_UTIME_H 1
/* Define if you have the <glob.h> header file.  */
#define PHAVE_GLOB_H 1
/* Define if you have the <dirent.h> header file.  */
#define PHAVE_DIRENT_H 1
/* Define if you have the <drfftw.h> header file.  */
#undef PHAVE_DRFFTW_H
/* Do we have <sys/soundcard.h> (and presumably a Linux-style audio
   interface)? */
#define PHAVE_SYS_SOUNDCARD_H 1
/* Do we have <ucontext.h> (and therefore makecontext() /
   swapcontext())? */
#define PHAVE_UCONTEXT_H 1
/* Do we have <linux/input.h> ? This enables us to use raw mouse input. */
#define PHAVE_LINUX_INPUT_H 1
/* Do we have <stdint.h>? */
#define PHAVE_STDINT_H 1
/* Do we have RTTI (and <typeinfo>)? */
#define HAVE_RTTI 1
/* Do we have Posix threads? */
#define HAVE_POSIX_THREADS 1
/* Is the code being compiled with the Tau profiler's instrumentor? */
#undef USE_TAU
/* Define if needed to have 64-bit file i/o */
#define __USE_LARGEFILE64 1
#define USE_DELETED_CHAIN 1
#define WANT_NATIVE_NET 1
/* Turn off warnings for using scanf and such */
/* Static linkage instead of the normal dynamic linkage? */
#undef LINK_ALL_STATIC
/* Define to compile the plugin code. */
#undef HAVE_P3D_PLUGIN
/* Platform-identifying defines. */
#undef IS_OSX
#define IS_LINUX 1
#undef IS_FREEBSD
#undef BUILD_IPHONE
#undef UNIVERSAL_BINARIES

(Edit: grammar)


#4

Hmm, and is interrogate being found by ppremake and is it linking the _igate.o and _module.o files into the libraries (when compiling libp3putil, for instance)?


#5

Ah! That would be the problem. I had disabled INTERROGATE_PYTHON_INTERFACE, thinking I wasn’t going to use python scripting; however that in turn disabled HAVE_INTERROGATE, so there was no interrogate built at all. Re-enabling that (and manually copying a few bins and libs from dtool into /usr/bin and /usr/lib ?? make install didn’t do that for me ?? oh, well, it works) caused a successful build. Everything seems to be working just fine. Thanks!!