Build 32 bit app from 64 bit development system

General questions regarding the usage of CodeLite
BowCatShot
CodeLite Curious
Posts: 7
Joined: Fri Oct 31, 2014 8:26 pm
Genuine User: Yes
IDE Question: c++
Contact:

Build 32 bit app from 64 bit development system

Post by BowCatShot »

Howdy. Running codelite 6.1 on my 64 bit linux wheezy system. Need to create the app to run on a 32 bit system but cannot find anywhere in the ide how to set the -m32 g++ compiler switch. Any suggestions?
User avatar
eranif
CodeLite Plugin
Posts: 6367
Joined: Wed Feb 06, 2008 9:29 pm
Genuine User: Yes
IDE Question: C++
Contact:

Re: Build 32 bit app from 64 bit development system

Post by eranif »

Hi,
There are number of ways of achieving this, I will name some:
1. Open the project settings dialog -> common settings-> compiler and simply add "-m32" to the "compiler options" field
2. You can create a new compiler with this flag enabled:

* settings->build settings->compilers->add compilers->clone an existing compiler
* give the compiler a name + select the compiler to clone
* after the new compilers is added to the list of compilers, click it and select the "Tools" tab (the first tab on the left)
* in the "C compiler" and "C++ compilers" field simply append -m32 to the tool path

Eran
Make sure you have read the HOW TO POST thread
BowCatShot
CodeLite Curious
Posts: 7
Joined: Fri Oct 31, 2014 8:26 pm
Genuine User: Yes
IDE Question: c++
Contact:

Re: Build 32 bit app from 64 bit development system

Post by BowCatShot »

Outstanding, eranif, your method #1 worked great. Thank you.
BowCatShot
CodeLite Curious
Posts: 7
Joined: Fri Oct 31, 2014 8:26 pm
Genuine User: Yes
IDE Question: c++
Contact:

Re: Build 32 bit app from 64 bit development system

Post by BowCatShot »

This is a simple console application.

When I build from the command line using
g++ main.cpp -Wall -m32 -o interleave
everything works fine.

When I just compile the source from within codelite with the -m32 flag there are no errors.

However when I try to build with codelite I get a ton of errors.

My build window is:

/bin/sh -c '/usr/bin/make -j2 -e -f Makefile'
----------Building project:[ Interleave - Debug ]----------
make[1]: Entering directory `/home/nick/CODELITEProjects/Interleave'
/usr/bin/g++-4.7 -c "/home/nick/CODELITEProjects/Interleave/main.cpp" -g -O0 -Wall -m32 -o ./Debug/main.cpp.o -I //usr/include/glib-2.0/ -I /.
/usr/bin/g++-4.7 -o ./Debug/Interleave @"Interleave.txt" -L.
/usr/bin/ld: i386 architecture of input file `./Debug/main.cpp.o' is incompatible with i386:x86-64 output
./Debug/main.cpp.o: In function `loadmusicfolders()':
/home/nick/CODELITEProjects/Interleave/main.cpp:107: undefined reference to `std::string::find(char const*, unsigned int) const'
/home/nick/CODELITEProjects/Interleave/main.cpp:114: undefined reference to `std::string::assign(std::string const&, unsigned int, unsigned int)'
/home/nick/CODELITEProjects/Interleave/main.cpp:122: undefined reference to `operator new(unsigned int)'
/home/nick/CODELITEProjects/Interleave/main.cpp:161: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `CreateInterleavedList()':
/home/nick/CODELITEProjects/Interleave/main.cpp:246: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `__gnu_cxx::new_allocator<std::string>::allocate(unsigned int, void const*)':
/usr/include/c++/4.7/ext/new_allocator.h:94: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o: In function `__gnu_cxx::new_allocator<ThisMusicFolder*>::allocate(unsigned int, void const*)':
/usr/include/c++/4.7/ext/new_allocator.h:94: undefined reference to `operator new(unsigned int)'
./Debug/main.cpp.o:/usr/include/c++/4.7/ext/new_allocator.h:94: more undefined references to `operator new(unsigned int)' follow
collect2: error: ld returned 1 exit status
make[1]: *** [Debug/Interleave] Error 1
make[1]: Leaving directory `/home/nick/CODELITEProjects/Interleave'
make: *** [All] Error 2
9 errors, 0 warnings

It builds just fine without the -m32 flag.

Here's some of the code:
typedef struct {
string FolderName;
vector<string> FilesInThisFolder;
} ThisMusicFolder;
string AMusicFile;
vector<string> AllMusicFiles;

string FolderName;

vector<ThisMusicFolder *> AllMusicFolders;
vector<ThisMusicFolder *>::iterator PointerToLargestFolderInAllMusicFolders;
vector<ThisMusicFolder *>::iterator Pos;
vector<ThisMusicFolder *>::iterator allPos;

vector<string>::iterator strPos;
vector<string>::iterator filesPos;

int endoffoldername;

endoffoldername = AMusicFile.find("/",0); //main.cpp:107
if (endoffoldername == -1) {
continue;
}


My codelite, now version 7.0, came from the debian linux repository.
Any ideas?
User avatar
eranif
CodeLite Plugin
Posts: 6367
Joined: Wed Feb 06, 2008 9:29 pm
Genuine User: Yes
IDE Question: C++
Contact:

Re: Build 32 bit app from 64 bit development system

Post by eranif »

Its not really related to codelite. You need to search your linker man page to see if you are missing some flags


Eran
Make sure you have read the HOW TO POST thread
DavidGH
CodeLite Plugin
Posts: 819
Joined: Wed Sep 03, 2008 7:26 pm
Contact:

Re: Build 32 bit app from 64 bit development system

Post by DavidGH »

Hi,

Don't you need to pass -m32 to the linker too?

Regards,

David
BowCatShot
CodeLite Curious
Posts: 7
Joined: Fri Oct 31, 2014 8:26 pm
Genuine User: Yes
IDE Question: c++
Contact:

Re: Build 32 bit app from 64 bit development system

Post by BowCatShot »

Thank you DaviGH, you were exactly right. I was thrown off by the fact that the cli build worked without having to say anything to the linker, just g++ ... -m32.
Post Reply