delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2007/06/20/11:13:26

X-Spam-Check-By: sourceware.org
X-YMail-OSG: IsdDVA8VM1kr19dZ7cXGF3gavtOhej9tCPsq6juSV5F1.m.yuZ_qLifmIycs04yhulSjLBQJNbAEd_3XBdr4Lvgkw1XYO6F8gFh5TlnkL89OxlqMpYY-
X-Mailer: YahooMailRC/651.38 YahooMailWebService/0.7.41.16
Date: Wed, 20 Jun 2007 08:12:51 -0700 (PDT)
From: "Dan O'Brien" <daniel DOT obrien AT yahoo DOT com>
Subject: shared library - undefined symbols
To: cygwin AT cygwin DOT com
MIME-Version: 1.0
Message-ID: <307299.34461.qm@web30801.mail.mud.yahoo.com>
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

I'm porting a C++ application that builds and runs on linux.  This application allows for "plugins" and will dynamically load any shared object found in its plugin directory.  This works fine on linux.  The trouble I'm having is getting the plugin "shared library" are in to build.  I'm running into undefined references (which should be allowed because they will be resolved when the shared library is loaded -- these symbols exist in the main application).

The failing g++ line:

g++ -o build/unknown-pc-cygwin/debug/plugin.so -shared -Wl,--allow-shlib-undefined build/unknown-pc-cygwin/debug/.objs/plugin.o build/unknown-pc-cygwin/debug/.objs/NullFilter.o build/unknown-pc-cygwin/debug/.objs/NullFilterFactory.o

The failing output:

build/unknown-pc-cygwin/debug/.objs/NullFilter.o: In function `_ZN10NullFilter7processERSt4listI14MatchingPeriodSaIS1_EE':
/home/OBrienDM/gpm/src/NullFilter.cpp:32: undefined reference to `getLoggerVerbosity()'
/home/OBrienDM/gpm/src/NullFilter.cpp:32: undefined reference to `isLoggerEnabledFor(int)'
/home/OBrienDM/gpm/src/NullFilter.cpp:32: undefined reference to `TimeStamp::TimeStamp()'
/home/OBrienDM/gpm/src/NullFilter.cpp:32: undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, TimeStamp const&)'
/home/OBrienDM/gpm/src/NullFilter.cpp:32: undefined reference to `TimeStamp::~TimeStamp()'
build/unknown-pc-cygwin/debug/.objs/NullFilter.o: In function `_ZN10NullFilter7processERSt4listI14MatchingPeriodSaIS1_EE':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/sstream:511: undefined reference to `log(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, unsigned int)'
build/unknown-pc-cygwin/debug/.objs/NullFilter.o: In function `_ZN10NullFilter7processERSt4listI14MatchingPeriodSaIS1_EE':
/home/OBrienDM/gpm/src/NullFilter.cpp:32: undefined reference to `TimeStamp::~TimeStamp()'
build/unknown-pc-cygwin/debug/.objs/NullFilterFactory.o: In function `_ZN17NullFilterFactoryC1Ev':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/ext/new_allocator.h:62: undefined reference to `MatcherFactory::instance()'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/ext/new_allocator.h:62: undefined reference to `MatcherFactory::registerFilterFactory(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FilterFactoryAdapter*)'
build/unknown-pc-cygwin/debug/.objs/NullFilterFactory.o: In function `_ZN17NullFilterFactoryC2Ev':
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/ext/new_allocator.h:62: undefined reference to `MatcherFactory::instance()'
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/ext/new_allocator.h:62: undefined reference to `MatcherFactory::registerFilterFactory(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FilterFactoryAdapter*)'
collect2: ld returned 1 exit status

These missing references are found in the executable:

 nm --demangle  ./build/unknown-pc-cygwin/debug/gpm.exe |grep 'getLoggerVerbosity()'
00456820 T getLoggerVerbosity()
 nm --demangle  ./build/unknown-pc-cygwin/debug/gpm.exe |grep 'TimeStamp::~TimeStamp()'
004b4470 T TimeStamp::~TimeStamp()
004b4460 T TimeStamp::~TimeStamp()

And will get resolved at load time.

The g++ line works fine under linux.

Any other flags I'm missing?

Rgds,

Dan O'Brien, daniel DOT obrien AT yahoo DOT com

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019