We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

Linkage problems using visual c++ tool

haboles
haboles asked
on
Medium Priority
372 Views
Last Modified: 2012-05-04
I was trying to connect 2 projects - one in C and the other in C++ to one C++ project.
i converted all the extensions of the C files into cpp ones.
Then , when i tryied to linkage all the project together i got more then 900 errors in the form of

A.obj : error LNK2005 : "unsigned char VAR" (?VAR@3PAPAEA) already defined in B.obj

all the A files that gives the linkage errors are the c files converted into cpp ones.
all the VAR variables that gives the linkage errors are in the file global.h which was belong to the former C project.
i suspected that this is an "IFNDEF" problem in the global.h problems but i don't think this is the case.

any advice of how to solve this errors will be highly appreciated since this question concerned to my final project which i need to finish very soon so thanks in advance
Comment
Watch Question

Commented:
Unlock this solution with a free trial preview.
(No credit card required)
Get Preview

Commented:
Global.h file contains all global variables with extern keyword. This doesn't create variable, only defines it's type. To create global variable, it should be written without extern keyword:

extern int VAR;    // like forward declaration

int VAR;    // variable is created

Create variable in only one cpp file. Use it in any cpp file - include "Global.h" to it and compiler is happy.


For the benefit of the C file (assuming you are compiling it as C rather than C++), you should use the following to ensure that the symbol doesn't get C++ name mangling:

header.h
--------8<--------
extern
#ifdef __cplusplus
          "C"
#endif
                int VAR;
--------8<--------

source.c/.cpp
--------8<--------
#ifdef __cplusplus
extern "C"
#endif
                int VAR = 0;
--------8<--------
>> i converted all the extensions of the C files into cpp ones.

Because of this all sources are C++ sources now.

Name mangling is an issue of functions only.

Regards, Alex

> Name mangling is an issue of functions only.

Stone me you're right... and structs, classes and static data members in classes I now see. Thanks for the correction, Alex.

Author

Commented:
thanks all for the quick answers.
good to know that i have place to go now when i have c/c++ question.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a free trial preview!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.