www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - undefined reference to `_D6deimos6python6Python12__ModuleInfoZ'

reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
With a deimos header file, I expect to need only to pass the dpath to it 
and the library it references to dmd, e.g.

stuff
  - deimos
   - python
    - Python.d

dmd <otherstuff> -Istuff -L-lpython2.7

I should not need to actually pass stuff/deimos/python/Python.d to dmd.

Unfortunately, that is currently not the case, and I am having a 
difficult time trying to figure out what is getting in my way.

been thumbing through nm output lately.


Anyone have any suggestions?
Sep 17 2012
parent reply Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 09/17/2012 04:16 PM, Ellery Newcomer wrote:
 With a deimos header file, I expect to need only to pass the dpath to it
 and the library it references to dmd, e.g.

 stuff
   - deimos
    - python
     - Python.d

 dmd <otherstuff> -Istuff -L-lpython2.7

 I should not need to actually pass stuff/deimos/python/Python.d to dmd.

 Unfortunately, that is currently not the case, and I am having a
 difficult time trying to figure out what is getting in my way.

 been thumbing through nm output lately.


 Anyone have any suggestions?

Found one little gotcha. In a templated function in my header file, I make a call to enforce. When the function is not called [instantiated], all is well. When the function is called, it generates yon undefined reference to __ModuleInfoZ. I guess this is because D needs a pointer to the module in order to look up enforce?
Sep 17 2012
parent reply "Jesse Phillips" <Jessekphillips+D gmail.com> writes:
On Tuesday, 18 September 2012 at 04:56:27 UTC, Ellery Newcomer 
wrote:

 In a templated function in my header file, I make a call to 
 enforce. When the function is not called [instantiated], all is 
 well. When the function is called, it generates yon undefined 
 reference to __ModuleInfoZ.

 I guess this is because D needs a pointer to the module in 
 order to look up enforce?

What does the call to enforce look like? The error isn't from the compiler so you are pulling in a symbol which isn't in your object files.
Sep 19 2012
parent Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
On 09/19/2012 01:30 PM, Jesse Phillips wrote:
 On Tuesday, 18 September 2012 at 04:56:27 UTC, Ellery Newcomer wrote:

 In a templated function in my header file, I make a call to enforce.
 When the function is not called [instantiated], all is well. When the
 function is called, it generates yon undefined reference to
 __ModuleInfoZ.

 I guess this is because D needs a pointer to the module in order to
 look up enforce?

What does the call to enforce look like? The error isn't from the compiler so you are pulling in a symbol which isn't in your object files.

here is an older file, as I haven't committed recently, but it shows the identical call: https://bitbucket.org/ariovistus/pyd/src/364451b5d732/infrastructure/python/python.d#cl-653 making a call to enforce elsewhere doesn't fix the linker problem.
Sep 19 2012