2009-07-23 10 views
0

Ich benutze VS 2008 und kompiliere meine Anwendung mit Multi-Threaded Debug (/ MTd). Bei Link Mal, wenn ich die folgende Fehlermeldung:Visual Studio C++ - ungelöstes Symbol __environ

error LNK2001: unresolved external symbol __environ 

Wo das Symbol definiert ist?

Dank Dima

Antwort

3

Wenn Sie mit/MD (oder Varianten), die Symbole _environ und _wenviron werden durch Funktionsaufrufe ersetzt. Sie müssen den Code aufspüren, der diese (veraltet und veraltet) Symbole verwendet, und sie zu use the proper function names machen. Ich habe viele Leute mit dem gleichen Problem wie Sie in google auch gefunden.

Ich fand einige mehr Details here:

Polling _environ in a Unicode context is meaningless when /MD or /MDd linkage is used. For the CRT DLL, the type (wide or multibyte) of the program is unknown. Only the multibyte type is created because that is the most likely scenario.

Wenn Sie die Verwendung des Symbols _environ der breiten Zeichen Version _wenviron, Ihre Original-Code arbeiten wird wahrscheinlich ändern.

+1

Ok, also muss ich getenv_s, _wgetenv_s und _putenv_s, _wputenv_s verwenden. Aber was, wenn ich über alle Umgebungsvariablen iterieren möchte? – dimba

+0

Ich habe ein bisschen mehr Details hinzugefügt, es sieht so aus, als ob Sie das _wenviron-Symbol verwenden sollten, wenn Sie/Md verwenden –

1

Wie die documentation beschreibt, wird _environ in Stdlib.h deklariert und in der crt lib implementiert.

Daher haben Sie möglicherweise ein Problem mit der Verknüpfung mit dieser Bibliothek, oder vielleicht ist es die falsche lib (versuchen Sie Ihre Build-Pfade zu überprüfen).