• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Servant of the Lord

Renaming DLLs and still linking properly

8 posts in this topic

I'm using a few DLLs in my project that have very verbose names. I would like to rename them, but the problem is that the linker file (libxyz.a) would link to the wrong name. [img]http://public.gamedev.net//public/style_emoticons/default/mellow.png[/img]

Without recompiling the library, is there some way I can manually - or by using a tool - give it a different DLL name to look for?

For example, one of the DLLs I want to rename is from Boost: [i]libboost_filesystem-mgw46-1_50.dll[/i]

It's providing good information in the name (the compiler, compiler version, and the Boost version), but not information I'm particularly needing. I'd like to rename it to just: [i]libboost_filesystem.dll[/i] and have my project still find it.

So is there a tool that I can use to just edit the .a file to give it a new name for the DLL?

Thanks in advance!
1

Share this post


Link to post
Share on other sites
I forgot to mention I'm using MinGW/GCC 4.6.3, not Visual Studio.


@Cornstalks: I do have the compiled .o files, the .a with the wrong name, and the compiled .dll.
Excellent idea re-linking the objects. Just tried it on a few, after some monkeying around, and I think it's working, though sometimes the filesizes being outputted are different (sometimes by more than a little) from the original DLLs Boost generated making me think some of the symbols are being missed.

@krippy: Thanks, that saves me alot of time.
0

Share this post


Link to post
Share on other sites
[quote name='Servant of the Lord' timestamp='1342736059' post='4961086']
I forgot to mention I'm using MinGW/GCC 4.6.3, not Visual Studio.
[/quote]
Sorry, I don't know why I assumed that. [url="http://www.mingw.org/wiki/CreateImportLibraries"]Here's a link for doing it for MinGW[/url].

[quote name='Servant of the Lord' timestamp='1342736059' post='4961086']
@Cornstalks: I do have the compiled .o files, the .a with the wrong name, and the compiled .dll.
Excellent idea re-linking the objects. Just tried it on a few, after some monkeying around, and I think it's working, though sometimes the filesizes being outputted are different (sometimes by more than a little) from the original DLLs Boost generated making me think some of the symbols are being missed.
[/quote]
Hmmm... you'll have to make sure the command parameters are exactly the same. For example, if you're using make, you can do [font=courier new,courier,monospace]make V=1[/font] to see what the exact command is for linking things, and then just copy 'n' paste the linking command with the changes you need. Usually [url="http://linux.die.net/man/1/ld"]ld[/url] or [url="http://linux.die.net/man/1/ar"]ar[/url] are used in linking stuff. If you're using [font=courier new,courier,monospace]ld[/font], just change the output DLL name (and be sure to pass [font=courier new,courier,monospace]--out-implib [i]file [/i][/font]to generate an import library (.a) (or you can pass [font=courier new,courier,monospace]--output-def [i]file [/i][/font]which will make a definitions file (.def) that can be used to make an import library later)). If you're using [font=courier new,courier,monospace]ar[/font], you're make a static library so an import library is useless and it won't make one, so no need to worry about this one. Another common linking tool is libtool, but I have less experience with that.

I'd say first try krippy2k8's solution for all you can, then try making an import library from the DLL, and then try relinking the object files.
1

Share this post


Link to post
Share on other sites
Thanks, adeyblue, I've been messing around all day with g++ and dlltool trying to get them to work, and succeeding to various degrees, but try as I might, there was always something that didn't line up properly. Wish I had your tool eight hours ago. [img]http://public.gamedev.net//public/style_emoticons/default/laugh.png[/img]

@krippy: I've been trying for the past three hours, and finally got it ten minutes ago. There's a trick with --layout=system that has been throwing everything off:

[b]bjam --toolset=gcc[/b]
...it still installs everything (despite --layout=system supposedly being the default).

I tried explicitly stating:
[b]bjam --toolset=gcc --layout=system[/b]
...and it gives a bunch of errors about duplicate names ("[b][i]error: Duplicate name of actual target: <pstage\lib>libboost_system.a[/i][/b]").


Apparently, the default for Boost is to generate every variation of every library (fine), and if you use[b] --layout=system[/b] then all the library variations get named the same thing and overwrite each other, hence the duplicate name messages.

So it seems the proper method (if you don't want the weird names), is to generate each variation type individually, and then move the resulting libraries before you generate the next variation. [img]http://public.gamedev.net//public/style_emoticons/default/wacko.png[/img]

So:
[b]bjam --toolset=gcc --layout=system [/b][b]link=shared variant=release[/b]
(copy the files to a new location)

[b]bjam --toolset=gcc --layout=system link=shared variant=debug[/b]
(copy the files to a new location)

Thanks for the help everyone. Edited by Servant of the Lord
1

Share this post


Link to post
Share on other sites
Yeah you can't build all variations of the libraries with the system layout with one command, but you can streamline it a bit by setting the --stagedir option in bjam. I usually use a script to execute commands like this:

bjam --toolset=gcc --layout=system link=shared variant=release --stagedir=/path/to/release/shared stage
bjam --toolset=gcc --layout=system link=shared variant=debug --stagedir=/path/to/debug/shared stage

I make that a habit even when building with versioned library names to reduce clutter.

Also FYI --layout=system is only the default on Unix, --layout=versioned is the default on Windows. Edited by krippy2k8
2

Share this post


Link to post
Share on other sites
Ah, thanks, I was wondering about that. I keep reading it was the default, but it obviously wasn't defaulting to it. [img]http://public.gamedev.net//public/style_emoticons/default/rolleyes.gif[/img]
0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0