Archived

This topic is now archived and is closed to further replies.

Ozz

Large Project (e.g PortaLib3D) structure...

Recommended Posts

Ozz    122
Does anyone have tips on setting up large projects involving multiple '.dlls' and '.libs' along the lines of PortaLib3D. What I mean is, the physical layout of directories. I have no problems from a programming POV but when I try to structure my projects in 'Binary', 'Source' and 'Library' directories I get all kinds of link errors (Along the lines of
    
Compiling...
lrTest.cpp
d:\programming\liquidrender\source\lrcore\lrcore.h(19) : warning C4081: expected 'newline'; found ';'
Linking...
   Creating library ../../Binaries/lrCore/Debug/lrCore.lib and object ../../Binaries/lrCore/Debug/lrCore.exp
LINK : error : Internal error during IdentifyAssignedOrdinals
  ExceptionCode            = C0000005
  ExceptionFlags           = 00000000
  ExceptionAddress         = 0040C768
  NumberParameters         = 00000002
  ExceptionInformation[ 0] = 00000001
  ExceptionInformation[ 1] = 00A30000
CONTEXT:
  Eax    = 00000008  Esp    = 0012EEC4
  Ebx    = 002F9D58  Ebp    = 00000008
  Ecx    = 00000002  Esi    = 00402AB4
  Edx    = 00000008  Edi    = 00A30000
  Eip    = 0040C768  EFlags = 00010202
  SegCs  = 0000001B  SegDs  = 00000023
  SegSs  = 00000023  SegEs  = 00000023
  SegFs  = 00000038  SegGs  = 00000000
  Dr0    = 0012EEC4  Dr3    = 002F9D58
  Dr1    = 00000008  Dr6    = 00000002
  Dr2    = 00000000  Dr7    = 51445D70
LINK : fatal error LNK1141: failure during build of exports file
Error executing link.exe.
    
Thanks in advance, Ozz. Edited by - Ozz on January 28, 2001 12:04:33 PM

Share this post


Link to post
Share on other sites
Liquid    122
Well, as far as directory layout goes, I typically have a base directory that contains a blank workspace. Then, when I add projects to the workspace, they get created inside the workspace directory:

G:\
.|--->Liquid Interactive
...|--->Fusion // main workspace dirtectory
.....|--->bin // manually created, all LIB and DLL files here
.....|--->core // static library project
.....|--->spatial // scene graph & BSP static lib
.....|--->math // math-related static lib
.....|--->graphics// tri-stripifier, interfaces to graphics API
.....|--->framework
.......|--->gr_opengl // opengl renderer, dll
.......|--->gl_d3d // Direct3D renderer, dll

etc. Then, I just setup each of those sub projects to output to the bin directory. I have the path G:\Liquid Interactive\Fusion added to my include search path. Then I''ll usually have a file in each project called "ext_libs.cpp" which contains #pragma s to import the libraries I need:

FILE: g:\Liquid Interactive\Fusion\spatial\ext_libs.cpp
#if defined(_DEBUG) || defined(DEBUG)
#pragma comment (lib,"..\\bin\\core_dbg.lib")
#pragma comment (lib,"..\\bin\\math_dbg.lib")
#else
#pragma comment (lib,"..\\bin\\core.lib")
#pragma comment (lib,"..\\bin\\math.lib")
#endif // defined(_DEBUG) || defined(DEBUG)

As far as that big''ol mess of errors, I have never seen that, but I would (a) fix the warning (you probably have a #pragma message () or something similar and you put a semicolon after it, and you shouldn''t) and then (b) do a clean and rebuild all. That *might* work.

Hope this helps,

Liquid

Share this post


Link to post
Share on other sites
Ozz    122
It seems I`ve sorted out the errors, I needed to add post-build copy commands to move the libraries. I now have a structure like this:

    
o-LiquidRender // Main workspace directory

|
o-Binaries // All DLL Files

|
o-Libraries // All LIB Files

|
o-Source
||
|o-Core // The Core Project Directory + 'core.h'

| |
| o-Debug // core.dll and core.lib

|
o-Test-App // The Test Application Directory



I`m using Visual C++ 6.0. When Core.dsp (Part of LiquidRender workspace) is built a copy of 'core.dll' is put in 'Binaries' and a copy of 'core.lib' is put in 'Libraries'.

The Test-App (Also part of the LiquidRender Workspace) uses 'Core.dsp' as a dependency, and includes 'core.h'. All the '#pragma comment(lib, ....)'s to link the 'core.lib' work fine but when I run Test-App, it reports that it cannot find 'core.dll'. It also reports that it it looking for the DLL in the Test-App directory.

How do I force Test-App to look for the .dll in the 'Binaries' directory?

Thanks for your time and help,

Ozz.

Edited by - Ozz on January 28, 2001 2:56:50 PM

Share this post


Link to post
Share on other sites